Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Синхронизация большого кол-ва tcp-клиентов
Список форумов
 ->  Сети


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
tilex : 268
Бывалый
Откуда: Москва

СообщениеЯнв 31, 2012 18:39 
Ответить с цитатой
Есть некий tcp-сервер. К нему подключено много клиентов, допустим 10 тыс. Периодически, например раз в секунду, специальный поток должен им всем отправлять небольшую порцию данных. Как в таком случае принято работать с массивом, хранящим список сокетов? Блочить его целиком или каждый сокет индивидуально? Пока я буду делать отправку на 10 тыс. клиентов, часть из них уже может закрыться, или подключатся новые. А если сокеты блокирующие? А если неблокирующие?
Какую структуру данных лучше выбрать для хранения этого списка сокетов, т.е. какую именно реализацию Set<>, List<> и т.д.?
В общем, какие есть общепринятые методики для таких ситуаций?
К началу Посмотреть профиль Отправить личное сообщение MSN Messenger ICQ Number
rfq : 218
Новичок

СообщениеФев 01, 2012 0:44 
Ответить с цитатой
tilex писал(а):
Есть некий tcp-сервер. К нему подключено много клиентов, допустим 10 тыс. Периодически, например раз в секунду, специальный поток должен им всем отправлять небольшую порцию данных. Как в таком случае принято работать с массивом, хранящим список сокетов? Блочить его целиком или каждый сокет индивидуально? Пока я буду делать отправку на 10 тыс. клиентов, часть из них уже может закрыться, или подключатся новые. А если сокеты блокирующие? А если неблокирующие?
Какую структуру данных лучше выбрать для хранения этого списка сокетов, т.е. какую именно реализацию Set<>, List<> и т.д.?
В общем, какие есть общепринятые методики для таких ситуаций?

Ну вот представьте себе непрерывно меняющееся множество сокетов. Вам нужно обойти его всё. Выбрали один сокет, обработали. Теперь надо выбрать любой другой, кроме обработанного. Следовательно, надо приписать каждому сокету идентификатор и уметь взять "любой с номером>N". Такая операция есть только в java.util.NavigableMap - higherEntry(K key). Готовых реализаций - 2, для многопоточной работы более подходит ConcurrentSkipListMap.
К началу Посмотреть профиль Отправить личное сообщение
escalade : 244
Новичок
Откуда: Kiev, Ukraine

СообщениеМар 14, 2012 11:36 
Ответить с цитатой
Создайте блокирующую очередь, добавьте туда тех юзеров (сокеты) которых нужно обработать. Создаете один, а лучше несколько потоков обработчиков. Поток забирает юзера с очереди и посылает данные, так и другие потоки до тех пор пока не опустошится очередь.
Проще простого.
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Сети


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru