短时间内太多的 WSASend 会成为问题吗?
Can too many WSASend in short time be a problem?
我正在使用 IOCP 制作一个简单的 mmorpg 服务器。
我实现了一个简单的移动功能,所以我用虚拟客户端(也是 IOCP)进行了测试。
仅当连接的客户端很少时一切正常。在大约 500~1000 个客户端连接后,一些虚拟客户端偶尔会读取奇怪的数据。我检查了服务器是否按预期发送了数据,但是当虚拟客户端读取它们时,它们读取的是随机数据。
我猜这可能与操作系统的接收缓冲区溢出有关,但我现在只是猜测...我不知道如何检查它们。
如有建议,将不胜感激!
WSASends 太多的问题通常不会表现为数据损坏;这更有可能是您代码中的错误。也许您的问题是由于您未能管理用于正确发送数据的缓冲区的生命周期引起的?它需要保持稳定,直到您完成 WSASend 调用。如果您比这更早地重复使用它,那么您将破坏正在发送的数据。
当您有很多 WSASends 未完成给很多客户端时,可能会出现这种情况的原因是发送操作可能需要更长的时间才能完成,因此更有可能命中您的错误...
只要您的客户能够以您发送数据的速度接收数据,您发出多少 WSASend 并不重要。一旦您发送的速度快于他们接收的速度,就会出现问题。我在 this answer.
中解决了这些问题
我正在使用 IOCP 制作一个简单的 mmorpg 服务器。 我实现了一个简单的移动功能,所以我用虚拟客户端(也是 IOCP)进行了测试。 仅当连接的客户端很少时一切正常。在大约 500~1000 个客户端连接后,一些虚拟客户端偶尔会读取奇怪的数据。我检查了服务器是否按预期发送了数据,但是当虚拟客户端读取它们时,它们读取的是随机数据。
我猜这可能与操作系统的接收缓冲区溢出有关,但我现在只是猜测...我不知道如何检查它们。
如有建议,将不胜感激!
WSASends 太多的问题通常不会表现为数据损坏;这更有可能是您代码中的错误。也许您的问题是由于您未能管理用于正确发送数据的缓冲区的生命周期引起的?它需要保持稳定,直到您完成 WSASend 调用。如果您比这更早地重复使用它,那么您将破坏正在发送的数据。
当您有很多 WSASends 未完成给很多客户端时,可能会出现这种情况的原因是发送操作可能需要更长的时间才能完成,因此更有可能命中您的错误...
只要您的客户能够以您发送数据的速度接收数据,您发出多少 WSASend 并不重要。一旦您发送的速度快于他们接收的速度,就会出现问题。我在 this answer.
中解决了这些问题