CNode

node tcp客户端如何强制发送数据?

问答
Mmyhirra发布于12 年前最后回复12 年前8 回复5773 浏览0 收藏

用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)

B
booxood#1·12 年前

这个?socket.end 但这样每次要重连了

如果不想重连的话,就自己设定个格式,拿到之后分析吧。

M
myhirra#2·12 年前
引用 booxood这个?socket.end 但这样每次要重连了 如果不想重连的话,就自己设定个格式,拿到之后分析吧。

@booxood socket.end 不建议在这个环境下使用。

定格式这种方式目前在用。不过还是有问题。 有一种情况,node会有一个默认的bufferSize,当数据到了这个size之后才会去发一个包。 这种情况下,添加格式,比如 client.write('send'+'|--end--|'), 当我同时write了1000条数据,你想要的结果可能是: sendsend....(1000个) 但是实际的结果会是: sendsend...se并没有1000,或许第500个的时候,截取了send的一部分。node就这样打了个包,发出去了。 所以,如何优化?

S
sinsupakaka#3·12 年前

setNoDelay试试

M
myhirra#4·12 年前
引用 sinsupakakasetNoDelay试试

@sinsupakaka

已试,貌似没用。

B
bnuhero#5·12 年前
引用 myhirra@booxood socket.end 不建议在这个环境下使用。 定格式这种方式目前在用。不过还是有问题。 有一种情况,node会有一个默认的bufferSize,当数据到了这个size之后才...

@myhirra

试试nssocket这个模块,它把自定义格式的消息(消息头和消息体)封装在一个Buffer中,然后用底层的TCP/TLS socket发送出去。看看是否能满足你的要求。

F
fengmk2#7·12 年前

在循环里面中,io根本拿不到执行的机会。。。

参与回复
登录后即可参与回复。登录