Может ли слишком много WSASend за короткое время стать проблемой? - PullRequest
0 голосов
/ 17 июня 2019

Я делаю простой сервер mmorpg с IOCP.Я реализовал простую функцию перемещения, поэтому я тестировал с фиктивными клиентами (также IOCP).Все работает нормально только когда подключено мало клиентов.После того, как около 500 ~ 1000 клиентов подключены, некоторые фиктивные клиенты иногда читают странные данные.Я проверил, что сервер отправляет данные, как я ожидал, но когда дело доходит до фиктивных клиентов, которые их читают, они читают случайные данные.

Я предполагаю, что это может быть связано с переполнением буфера recv операционной системы, но я толькоугадай прямо сейчас ... я понятия не имею, как их проверить.

Любое предложение будет очень благодарным!

1 Ответ

0 голосов
/ 17 июня 2019

Проблема со слишком большим количеством WSASends обычно не проявляется как поврежденные данные; это скорее всего ошибка в вашем коде. Возможно, ваша проблема вызвана тем, что вы не можете управлять временем жизни буфера, который используется для правильной отправки данных? Он должен оставаться стабильным, пока вы не получите завершение вызова WSASend. Если вы будете использовать его раньше, вы повредите отправляемые данные.

Причина, по которой это может появиться, когда у вас есть много WSASends, ожидающих большого количества клиентов, заключается в том, что операции отправки могут занимать больше времени, поэтому повышается вероятность того, что ваша ошибка будет обнаружена ...

Неважно, сколько WSASends вы выдаете, если ваши клиенты могут получать данные так быстро, как вы можете их отправить. Как только вы отправите быстрее, чем они могут получить, возникнут проблемы. Я решаю эти проблемы в этом ответе .

...