写入节点WebSocket是阻塞还是非阻塞?

当我发送消息到WebSocket客户端是阻止或非阻止代码?

ws.send(msg); 

换句话说,在setTimeout打包send是否是一个好习惯?

我正在使用节点Einaros WS库,但我认为这个问题也适用于许多其他库,如Socket.Io或Engine.Io。

首先,在一个setTimeout中封装一个阻塞函数只会延迟阻塞调用,对吧? 所以如果你这样做没关系。 节点的非阻塞性质来自底层引擎运行事件系统,以便让传统阻塞调用(如文件系统检索)完成时知道这一事实。

Websockets是一个“火和忘记”的协议,我认为这是你要问的。 服务器和客户端不会等待响应,而是使用与上述相同的系统。 当他们从对方排出后,他们将“听”事件,然后处理一个过程。 值得注意的是,浏览器中的websocket通信只能在TCP协议下进行,这意味着如果一个数据包丢失了,那么它将再次从服务器请求数据包。 这通常不是一个问题,但是在毫秒重要的实时游戏意义上,这通常不是理想的。