写入Node WebSocket是阻塞还是非阻塞?

时间:2014-08-09 07:34:44

标签: node.js

当我将 msg 发送到WebSocket客户端时,它是阻止还是非阻塞代码?

ws.send(msg);

换句话说,将send包裹在setTimeout内是不错的做法?

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

1 个答案:

答案 0 :(得分:2)

首先,在setTimeout中包含阻塞函数只会延迟阻塞调用,对吧?所以如果你这样做也没关系。节点的非阻塞性质来自于底层引擎运行事件系统以告知您传统阻塞调用(例如文件系统检索)何时完成的事实。

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