gpt4 book ai didi

javascript - 发送后如何在 OPEN 就绪状态下保持 websocket 连接?

转载 作者:IT王子 更新时间:2023-10-29 02:12:48 26 4
gpt4 key购买 nike

我是 websockets 的新手。

在我的设置中,我有一个用 Go 编写的普通 websocket 服务器 ( playground )

我创建了一个 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。这或许就是对它的印证。

编辑:包 golang.org/x/net/websocket 在处理程序 ServeHTTP 函数返回时关闭 websocket 连接。默认情况下,websocket 连接绑定(bind)到处理程序的实例。

最佳答案

当处理函数返回时,在你的例子中 EchoServer 套接字将被 http 框架自动关闭。由于您为将 yahoo 响应写入客户端的循环启动了一个 go 例程,因此 EchoServer 函数将在它有时间发送响应之前终止(并因此关闭套接字) .

解决方案是删除 go 例程的生成,只在 EchoServer 中执行循环。

关于javascript - 发送后如何在 OPEN 就绪状态下保持 websocket 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com