我有一个在k8s
下运行的jetty
web应用程序。此web应用程序有一个websocket终点。所部署的服务通过https
上的nginx
入口公开。
一切都很好,我运行了网络应用程序,网络套接字也很好(即推送和接收消息(,但网络套接字关闭时会出现1006
错误代码,老实说,这并没有阻止我的代码工作,但看起来也不太好。
网络套接字在/notifications
中公开。在"正常"配置中,即不是k8s
,只是安装在VM上的普通软件,我需要将以下内容添加到nginx.conf
中
location /notifications {
proxy_pass http://XXX/notifications;
proxy_read_timeout 3700s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Origin '';
}
我试着通过入口来做这件事
nginx.ingress.kubernetes.io/configuration-sippet:|
location /notifications {
proxy_pass http://webapp:8080/notifications;
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
}
但它没有效果,即我检查了生成的nginx.conf
,没有添加这样的块。。。
有人以前遇到过这样的问题吗?关于如何解决1006
问题,有什么线索吗?
1006
的含义
根据RFC-6455,1006
表示Abnormal Closure
:
用于指示在预期状态代码时连接异常关闭(即未发送关闭帧(。
另请参阅CloseReason.CloseCodes(Java(TM(EE 7规范API(
无论是在服务器上还是在客户端上,都有很多可能的原因。
客户端错误:请尝试websocket.orgEcho Test
为了隔离和调试客户端的错误,您可以使用websocket.org Echo Test
至于服务器错误
码头
这里有关于Jetty的讨论:关于异常的问题·Issue#604·eclipse/Jetty.project.但它没有包含任何解决方案。
golang
服务器代码的争用检测器
如果你的服务器是用golang
编写的,你可以试试Data Race Detector-Go编程语言
数据竞赛是并发系统中最常见、最难调试的错误类型之一。当两个goroutine同时访问同一个变量,并且其中至少有一个访问是写时,就会发生数据竞争。有关详细信息,请参阅Go Memory Model。
以下是一个可能导致崩溃和内存损坏的数据竞赛示例:
func main() { c := make(chan bool) m := make(map[string]string) go func() { m["1"] = "a" // First conflicting access. c <- true }() m["2"] = "b" // Second conflicting access. <-c for k, v := range m { fmt.Println(k, v) } }
PHP
代码的情况
这里讨论的PHP
代码的情况是:通过close((websocket的方法(1006(·Issue#236·walkor/Workerman 来清理关闭的连接