我使用 https://pkg.go.dev/golang.org/x/net/websocket 来创建服务器端 websocket。通过它进行的所有通信均采用 json 格式。因此,我的代码包含:
func wsHandler(ws *websocket.Conn) { var evnt event websocket.JSON.Receive(ws, &evnt) …
但是,这会阻塞,直到客户端关闭连接。我知道这个 websocket 包早于上下文(并且我知道有更新的 websocket 包),但仍然 – 真的没有办法以非阻塞方式等待传入帧吗?
这会阻塞,直到客户端关闭连接。
处理并发阻塞操作的最简单方法是给它们一个 goroutine。 goroutines 与进程或线程不同,本质上是“免费的”。
func wsHandler(ws *websocket.Conn) { go func() { var evnt event websocket.JSON.Receive(ws, &evnt) .... }() }
以上是如何在 Go 中非阻塞地监听服务器端 websocket的详细内容。更多信息请关注PHP中文网其他相关文章!