Делаете UDP протоколом, ориентированным на соединение?
Я сделал онлайн-игру, которая использует протокол UDP для связи между клиентами и сервером. Однако, поскольку UDP не требует соединения, я не могу определить, закрыл ли клиент игру или произошла ошибка в сети. Поэтому мне нужно сделать UDP протоколом, ориентированным на соединение, или, по крайней мере, обнаружить сетевые ошибки. Как я мог сделать это? Как ориентировано TCP соединение?
2 ответа
Во-первых, я понимаю, что вам нужен UDP из-за эффективности, но, возможно, вы могли бы попробовать попробовать TCP?
В противном случае я бы просто сделал, как упоминал @Phil Taprogge. Отправьте определенный пакет UDP, который идентифицируется сервером каждые n секунд. Если сервер не получает его в течение 3*n секунд, вполне вероятно, что клиент отключился.
Как вы говорите, UDP не имеет понятия о соединениях. Таким образом, единственный способ достичь того, чего вы хотите, - это реализовать необходимую логику самостоятельно поверх UDP.
Например, вы можете регулярно проверять клиентов на сервере с помощью пакета UDP, содержащего уникальный идентификатор. Если сервер не получит это от клиента в течение некоторого времени, он будет считать этот клиент мертвым.