通过套接字发送消息之前的延迟 - 这有什么帮助?

时间:2010-06-30 17:15:21

标签: tcp sockets timing

我有一个到第三方软件应用程序的tcpip套接字接口。我已经为几个客户站点实现了这个界面没有问题。最新的客户,虽然......问题。我们已经开启了两端应用程序的登录,并在PC上安装了Wireshark来记录原始tcpip流量。有了这个,我们已经证明我的服务器应用程序成功发送消息,电脑接收消息,但客户端应用程序没有看到它。 (这是一个完全断断续续的问题,这就是解决问题的原因。)

套接字详细信息非常简单:一个套接字处理服务器和PC之间的双向通信。消息是简单的ascii文本,相当短(不是XML)。服务器通过发送第一条消息启动通信,然后客户端响应多条消息。应用程序运行时,套接字始终保持打开状态。客户端应用程序的设计使最终用户一次只能处理一个案例,从而防止发生消息冲突。他们设置了某种轮询,他们的应用程序“休眠”,直到它看到来自服务器的启动消息。

第三方供应商建议我在向他们发送启动消息之前添加几秒延迟。我看不出这有多大帮助。如果客户端正在“休眠”,只是轮询套接字等待消息,如何在第一条消息帮助之前添加延迟?这不像我们发送两条消息而第二条消息丢失。它失去了第一条消息。所以,如果我们现在或两秒后发送该消息,我不明白这是多么重要。

我问他们,他们没有给我详细信息。它可能是编码中的一些专有细节,他们不想透露给我,这是公平的。所以我在这里问,因为我总是在学习有关套接字编程的新知识。也许你们可以了解一下如何通过消息计时来影响tcpip套接字的轮询?

1 个答案:

答案 0 :(得分:2)

由于其他人的客户并且他们不会告诉你它做了什么(除了说'插入延迟'),答案可能是他们的客户正在阅读并丢弃该消息,因为它尚未处于状态处理它。延迟将允许客户端进入可以正确响应消息的状态。

换句话说,客户有竞争条件。一种简单的方法就是如果他们有一个线程用于阅读消息而另一个用于处理消息。

在客户端上运行strace(1)以查看它正在进行的系统调用时,很难说出客户端实际在做什么。