|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
tilex : 268 Бывалый Откуда: Москва
|
Янв 31, 2012 18:39 |
|
|
Есть некий tcp-сервер. К нему подключено много клиентов, допустим 10 тыс. Периодически, например раз в секунду, специальный поток должен им всем отправлять небольшую порцию данных. Как в таком случае принято работать с массивом, хранящим список сокетов? Блочить его целиком или каждый сокет индивидуально? Пока я буду делать отправку на 10 тыс. клиентов, часть из них уже может закрыться, или подключатся новые. А если сокеты блокирующие? А если неблокирующие?
Какую структуру данных лучше выбрать для хранения этого списка сокетов, т.е. какую именно реализацию Set<>, List<> и т.д.?
В общем, какие есть общепринятые методики для таких ситуаций? |
|
|
|
 |
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
|
Список форумов
-> Сети |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|