Я пытаюсь реализовать свою идею простого, но довольно эффективного многопоточного сервера, работающего на UDP. Основная цель — для игровых (подобных) приложений, но было бы хорошо, если бы их можно было использовать и в других целях.
Я хочу использовать этот API / технологии и т. Д.
Что касается стратегия связи сервера и клиента, я подумал о чем-то вроде этого:
У каждой программы есть два сокета — один, который прослушивает указанный порт, и другой, который используется для отправки данных на сервер / другие клиенты. Оба сокета работают в разных потоках, так что я могу одновременно считывать и отправлять данные (вроде), так что ожидание данных не ухудшит мою производительность. Будет один главный сервер, и другие клиенты будут подключаться напрямую к этому серверу. Клиенты будут отправлять только свои данные и получать данные непосредственно с сервера.
Теперь у меня есть немного вопрос:
Кроме того: он должен хорошо работать с 2-4 игроками одновременно, в настоящее время я не планирую использовать его с большим количеством игроков.
Интуитивно понятно, что с точки зрения многопоточности Linux + Pthread была бы хорошей комбинацией. На этой комбинации работает огромное количество критически важных систем. Тем не менее, когда мы переходим к std :: thread, наличие зависимой от платформы природы приятно иметь. Конечно, если в диалекте Windows есть некоторые неприятные запахи, MS исправит их в будущем. НО, если бы я был вами, я непременно выберу комбинацию Linux + std :: thread. Выбор Linux поверх Windows — это отдельная тема, и здесь нет необходимости комментировать (с точки зрения развития сервера). std :: thread предоставляет вам хороший набор функций, но обладает мощью pthreads.
Что касается UDP, у вас есть как плюсы, так и минусы. Но я бы сказал, что если вы собираетесь открыть свой сервер для общественности, вам следует подумать и о сетевых брандмауэрах. Если вы можете решить проблемы, присущие транспортному уровню UDP (переупорядочение пакетов, восстановление потерянных пакетов), сервер UDP в большинстве случаев имеет небольшой вес.
Решать, как часто вам нужно отправлять сообщения, зависит от вашей игры. Я не могу это комментировать.
Кроме того, более серьезно обращайте внимание на дополнительную безопасность передачи данных. Рано или поздно ваш сервер будет взломан. Это просто факт времени.