| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > TCP / UDP в Java сервере |
| Автор: Tipon 5.4.2010, 19:52 |
| Мучает проблема выбора между UDP и TCP. Основные особенности плюсы и недостатки этих протоколов я знаю. Мне не ясно только как поведет себя сервер в разных вариантах. Планируется написать сервер выполняющий следующие задачи: - Подключать несколько одновременно работающих клиентов (с расчетом на 500, но теоретически возможно в два раза больше) - Организовать между всеми пользователями функцию чата (помимо общего чат-канала, должны быть групповые комнаты и приват-каналы) - Передавать между всеми пользователями все изменения системы-лобби (проще говоря это 3 массива содержащие списки объектов, каждый отдельный из этих объектов содержит по 20-30 текстовых\цифровых данных, которые могут достаточно часто изменяться разными пользователями сервера) По сути вся передача между клиентом и сервером сводится к коротким текстовым сообщениям(командам) длинно 500-1000 байт, которыми приходится обмениваться очень часто не столько из-за новых сообщения в чате, сколько из-за изменений полей в таблицах лобби. Конечно, если бы я мог, я однозначно выбрал бы UDP протокол, но проблема в том, что клиент нужно написать именно во Flashe, где UDP реализован очень странно(не разбирался глубоко, но он как опция для МультиМедиа потоковых данных), а TCP работает более чем нормально и полноценно. Возникает вопрос: Если использовать TCP протокол для соединения клиентов, то сервер при обработке выше расписанных задач не загнется? Если сам сервер стоит не на серверной машине в хорошем дата центре с широким каналом в интете, а на обычном (ничем не примечательном) домашнем компьютере с не очень широким и не идеальном канале выхода в интернет. |
| Автор: COVD 5.4.2010, 22:13 |
| Казалось бы ответ прост - если допустима потеря пакетов при пересылке, то выбирайте UDP. Если потеря недопустима - TCP. Однако если клиенты соединяются через интернет, то найдутся пользователи, которые смогут соединиться только по HTTP. Поэтому лучше всего HTTP. |
| Автор: dobrolub 5.4.2010, 23:46 |
| а клиенты в одном субнете? |
| Автор: COVD 6.4.2010, 00:31 | ||
Мощность имеющегося в наличии сервера не должна служить критерием выбора протокола связи. HTTP может имитировать постоянное соединение - клиент шлет get запрос серверу, и сервер шлет бесконечный ответ.
тогда TCP |
| Автор: LSD 6.4.2010, 14:28 | ||||
Тока осталось добавить контрольную сумму (чтобы убедится, что дошло все верно) и ID пакета, чтобы когда пошлем несколько пакетов суметь понять на какой мы получили подтверждение. И можно себя поздравить, мы реализовали свой TCP с блекджеком и шлюхами
Если писать по уму, с использованием NIO, то не загнется. |