node tcp客户端如何强制发送数据?
发布于 11 年前 作者 myhirra 5548 次预览 最后一次回复是 11 年前 来自 问答
用node的tcp client在发送数据,一般是用client.write('send','utf-8');
这样如果想发100条数据,只需:
for(var i=0;i<100;i++){
client.write('send','utf-8')
}
但这样的话,在服务端只会收到一条数据,类似于:
received client: sendsendsendsend ....
所以,要怎样让client发数据的时候不是一块儿发,而真正的做到一条一条的发,这样服务端就可以逐一的去处理这些数据了。
8 回复
这个?socket.end 但这样每次要重连了
如果不想重连的话,就自己设定个格式,拿到之后分析吧。
@booxood socket.end 不建议在这个环境下使用。
定格式这种方式目前在用。不过还是有问题。 有一种情况,node会有一个默认的bufferSize,当数据到了这个size之后才会去发一个包。 这种情况下,添加格式,比如
client.write('send'+'|--end--|'), 当我同时write了1000条数据,你想要的结果可能是:sendsend....(1000个)但是实际的结果会是:sendsend...se并没有1000,或许第500个的时候,截取了send的一部分。node就这样打了个包,发出去了。 所以,如何优化?setNoDelay试试
@sinsupakaka
已试,貌似没用。
@myhirra
试试nssocket这个模块,它把自定义格式的消息(消息头和消息体)封装在一个Buffer中,然后用底层的TCP/TLS socket发送出去。看看是否能满足你的要求。
@myhirra 优化?优化什么?没明白。。。
是想拿全部数据再解析?可以监听end事件
在循环里面中,io根本拿不到执行的机会。。。
@booxood
监听end事件要client.end()才行。