【发布时间】:2016-11-20 23:12:07
【问题描述】:
我是 websockets 的新手。
在我的设置中,我有一个用 Go (playground) 编写的简单 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”,但没有一个“yahoo”通过。似乎 WebSocket.readystate 的某处变为 3(已关闭)。
澄清一下,服务器接收并打印“Hello”,然后实际上每 1.5 秒触发一次“yahoo”消息,但此时连接已关闭,因此onmessage 回调永远不会触发。
我是否遗漏或误解了什么?
编辑:遇到comparison github.com/gorilla vs. golang.org/x/net,声称 golang.org/x/net websocket 实现不支持 pong。这可能是对它的确认。
编辑:当处理程序 ServeHTTP 函数返回时,包 golang.org/x/net/websocket 关闭 websocket 连接。默认情况下,websocket 连接绑定到处理程序的实例。
【问题讨论】:
-
我推荐你使用 gorilla/websocket 是 Go 中最好的实现,看看例子:github.com/gorilla/websocket/tree/master/examples
标签: javascript node.js go websocket