对websocket的入口支持



我有一个在k8s下运行的jettyweb应用程序。此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 来清理关闭的连接

相关内容

  • 没有找到相关文章

最新更新