【发布时间】:2017-09-16 08:19:00
【问题描述】:
我有一个关于 Node.js tcp 套接字和 on('data') 事件的问题。
例如,我的客户端用很长的消息socket.write('<VERY LONG MESSAGE>') 向套接字发送数据;
服务器正在侦听端口并接收该数据。
<VERY LONG MESSAGE> 是否可以通过服务器data 事件而不是从其起始字节接收? (例如由 3 个或更多部分分块)。
我知道合并消息,但是分块呢?
我应该为我的套接字实现接收到的数据大小验证和合并少数data 事件结果的结果还是socket.write 通常发送消息而不进行分块?
【问题讨论】:
-
数据总是可以被分块的,即使发送方没有发送任何分块。但是第一个字节将在第一个块中,块应该以正确的顺序出现等。从这个意义上说,TCP 是一个有保证的协议,另一方面,UDP 需要更多的小心..
-
这意味着
data事件可以在服务器上触发几次(对于1个客户端写操作)? -
是的,你总是需要处理块。
-
但是我每次有
data事件的块中的 1 个都会有所需的起始字节?我想编写协议起始字节来识别包内的噪音,并在起始字节之后识别 4 字节的消息大小。正确的协议读取实现是否足够? -
不确定你的意思..但是让我们分解一下..如果说客户端发送了世界
HELLO,理论上这可以分解为2个块。块 1 =HEL块 2 =LO.. 当然,在实践中,这样的短消息可能会一次性发送。但基本上你的事件应该去 -> 数据,数据............结束。
标签: javascript node.js sockets