我有一个客户端.NET应用程序和一个服务器.NET应用程序,通过套接字连接。套接字缓冲它接收到的数据
客户端发送的每500毫秒20个左右的字符的字符串。
在我的本地开发机器,这个完美的作品,但一旦客户端和服务器都在两个不同的服务器,服务器不立即当它发送接收的字符串。客户端仍然发送完美,我已经用Wireshark证实了这一点。我也确认服务器确实每500毫秒接收一次字符串。
问题是我的服务器应用程序等待消息只有实际每隔20秒接收一次消息 - 然后它从这20秒收到所有内容。
我使用异步插座,由于某种原因,回调只是不调用超过每20秒一次。
在AcceptCallback
它建立连接并调用BeginReceive
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
此作品在我的本地机器上,但我的生产服务器上的ReadCallback不会立即发生。
BufferSize设置为1024.我也尝试将其设置为10.一旦ReadCallback被调用,它会在一次从套接字读取多少数据时产生差异,但这不是真正的问题。一旦它调用ReadCallback,其余的工作正常。
我使用的是微软的Asynchronous Server Socket Example,所以你可以看到有什么我ReadCallback方法如下所示。
我怎么能立即得到BeginReceive回调当数据到达服务器?
-
UPDATE
这已经得到解决。这是因为服务器有一个单一的处理器和单核。加入另一个核心后,问题立即解决。当呼叫通过服务器时,ReadCallback立即被调用。
谢谢你的建议!
您可以轻松编写一个同步接收的小测试程序,只是为了查看它是否以更及时的方式获取数据?这可能有助于隔离问题。 –
我会尽力做到这一点。另一个问题说,这将是同样的结果,但无论如何它可能值得一试。 –
@JimMischel:我将其更改为同步,现在它立即收到数据。所以问题仍然是BeginReceive在数据到达时不会立即回调。我不想继续同步,因为那时我必须自己执行线程来同时处理多个连接。 –