我有一个客户端 .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,其余的工作正常。
我正在使用 Microsoft 的异步服务器套接字示例,因此您可以在那里看到我的 ReadCallback 方法的样子。
当数据到达服务器时,如何立即获取 BeginReceive 回调?
--
更新
这已经解决了。这是因为服务器只有一个处理器和一个核心。添加另一个核心后,问题立即解决。现在,当调用通过服务器时立即调用 ReadCallback。
谢谢大家的建议!!