由于中间有段时间只向A服务器发送请求,造成一个结果:紧接着再向B服务器请求数据的时候,B服务器会比较及时的是把数据send()掉,可是我要等1~2秒后才能收到。在这1~2秒期间,一直在接收A返回的数据,而不接收B服务器返回的数据。
由于数据量不大,使用了
int option=1;
setsockopt (sockconn,IPPROTO_TCP,TCP_NODELAY,(char *) &option,sizeof(option));
应该是让数据send()之后立即发送。所以不应该是只写到缓冲区里,而由于WIN socket对TCP的优化造成的原因。
可是还有其他原因会造成这种问题吗?
麻烦高手指点一二,感激不尽!
急急急!
12 个解决方案
#1
麻烦高手指点下!问题比较急!
#2
看不明白,不知道你在说什么,请问能不能说得明白点吗?谢谢。
#3
不好意思,没说明白!
简单说就是我开了两个线程来接收来自两个节点的数据(两个节点命名为A和B),接收B节点数据的线程会有一次接收很滞后。我通过查看打印出来的消息发现,原因好像是这一次接收一直没有得到响应,而本来应该接收这一次数据的时间,一直在接收A节点的数据。大概等到1~2秒后才接收B节点的数据。
附:我使用WANem在局域网里模拟广域网。
#4
自己顶一下!
#5
不懂。帮顶……
#6
高手帮忙呀!
#7
自己顶
#8
B服务器的业务流程需要多长时间?
客户端的数据处理时间
把这些都加加,在看看时间差值
客户端的数据处理时间
把这些都加加,在看看时间差值
#9
(1)我测试过客户端的数据处理时间,很小。完全可以忽略;
(2)B服务器端的业务流程?你还是指处理时间吗?我也测试过,在B服务器端,已经把要发送的数据写到了缓冲区,可是客户端就是不及时接收。如果客户端没有频繁的向A请求,而是大概交替的请求A和B,那么就没有这种情况出现;
(3)我用的WANem在局域网里模拟广域网,去掉该软件的使用,就不再有上述问题出现。
有可能是WANem的问题,可是我觉得这种可能性比较小。
#10
顶。。。。高手指点一二呀!
#11
遇到这种问题,先用捉包工具,看看数据到达的时间,再看是不是代码的问题
#12
你是不是在A中有接收数据的业务数据处理,否则,操作系统的时间片不会1,2秒后才切换到你的B中的吧,
#1
麻烦高手指点下!问题比较急!
#2
看不明白,不知道你在说什么,请问能不能说得明白点吗?谢谢。
#3
不好意思,没说明白!
简单说就是我开了两个线程来接收来自两个节点的数据(两个节点命名为A和B),接收B节点数据的线程会有一次接收很滞后。我通过查看打印出来的消息发现,原因好像是这一次接收一直没有得到响应,而本来应该接收这一次数据的时间,一直在接收A节点的数据。大概等到1~2秒后才接收B节点的数据。
附:我使用WANem在局域网里模拟广域网。
#4
自己顶一下!
#5
不懂。帮顶……
#6
高手帮忙呀!
#7
自己顶
#8
B服务器的业务流程需要多长时间?
客户端的数据处理时间
把这些都加加,在看看时间差值
客户端的数据处理时间
把这些都加加,在看看时间差值
#9
(1)我测试过客户端的数据处理时间,很小。完全可以忽略;
(2)B服务器端的业务流程?你还是指处理时间吗?我也测试过,在B服务器端,已经把要发送的数据写到了缓冲区,可是客户端就是不及时接收。如果客户端没有频繁的向A请求,而是大概交替的请求A和B,那么就没有这种情况出现;
(3)我用的WANem在局域网里模拟广域网,去掉该软件的使用,就不再有上述问题出现。
有可能是WANem的问题,可是我觉得这种可能性比较小。
#10
顶。。。。高手指点一二呀!
#11
遇到这种问题,先用捉包工具,看看数据到达的时间,再看是不是代码的问题
#12
你是不是在A中有接收数据的业务数据处理,否则,操作系统的时间片不会1,2秒后才切换到你的B中的吧,