Задать вопрос
s7106500
@s7106500

Нужно ли сжимать данные при передаче клиент-сервер? Как должен работать сервер?

Пишу программу на C++ .
Данные от клиента передаются на сервер 2-3 раза в секунду. На сервере идет расчет и высылается ответ.
Передача через сокеты Win API.
Клиентов около тысячи. Сервер один.

Посчитал, что в среднем за запрос клиент шлет 1 кб данных.

Вопроса два:

1. Один кб данных в запросе это много или мало по нынешним меркам? Я могу ужимать, данные но нужно ли?...
Я могу сжать данные до 300 байт.
Или слать только измененные данные.

Вопрос 2:
Такая логика работы сервера нормальная:

Сервер в цикле перебирает все подключенные сокеты, смотрит есть ли там сообщения. Если есть, то принимает, считает, отвечает и переходит к следующему сокету.

Другой вариант: сервер в цикле собирает со всех данные, потом отдельным циклом расчитывает и в третьем цикле всем все отправляет

Как правильнее делать?
  • Вопрос задан
  • 221 просмотр
Подписаться 2 Простой Комментировать
Ответ пользователя Alexey К ответам на вопрос (4)
Demanoidos
@Demanoidos
безнравственный извращенец с богатой фантазией
В вашем вопросе нет информации о том, что за расчёты вы делаете. Для отдельных пользователей или что-то глобальное, результат чего нужен всем без исключения клиентам. От этого напрямую зависит логика сервера.

Насчёт сжатия — ответ простой. Не важно, много или мало вы передаёте. Исходите из того, нужно вам экономить трафик или нет. Если будете паковать данные — потеряете в производительности. Банально посчитайте, сколько времени будет уходить на упаковку и распаковку данных и уложитесь ли вы в нужное вам время, будет ли бонусом экономия трафика, если у вас плохой коннект клиента и на сжатии вы выиграете время.

Насчёт опроса тредов — вам уже ответили. Перебирать 1000 потоков, ожидая, что там что-то есть — неправильно. Потеряете время на переключении контекста. Для сервера с таким количеством подключений нужна событийная модель.
Ответ написан
Комментировать