我是websockets的新手。
在我的设置中,我有一个用Go语言编写的琐碎的Websocket服务器(游乐场)
我创建一个WebSocket
对象,设置其onmessage
回调并调用其send
方法进行测试。
var w = new WebSocket("ws://localhost:12345/echo")
w.onmessage = (msg) => {
console.log(msg.data)
}
w.onopen = () => {
w.send("Hello") // this fires OK
}
我期望基于服务器代码发生的事情是接收“ Hello”消息,并保持每1.5秒向客户端发送“ yahoo”消息。实际发生的是发送了“ Hello”,但没有一个通过。似乎沿着WebSocket.readystate变为3(关闭)。
为了明确起见,服务器接收并打印“ Hello”,然后实际上每1.5秒触发一次“ yahoo”消息,但是此时连接已关闭,因此onmessage
回调永远不会触发。
我有什么遗漏或误解吗?
编辑:比较github.com/gorilla与golang.org/x/net对比,声称golang.org/x/net websocket实现不支持pong。这可能是对它的确认。
编辑:当处理程序ServeHTTP函数返回时,包golang.org/x/net/websocket会关闭websocket连接。默认情况下,websocket连接绑定到处理程序的实例。
当处理程序函数返回时,您的情况EchoServer
将由http框架自动关闭套接字。由于您启动了用于将yahoo
响应写入客户端的循环的go例程EchoServer
,因此该函数将在有时间发送响应之前终止(并因此关闭套接字)。
解决的方法是删除go例程的生成,然后在内进行循环EchoServer
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句