Программирование Сокета Java не работает на 10 000 клиентов

Правильный файл DLL для надстройки Excel SAS для SAS 7.1 - «SAS.OfficeAddin.tlb».

он находится в папке «C: \ Program Files (x86) \ SAS \ ​​SASHome \ x86 \ SASAddinforMicrosoftOffice \ 7.1 \».

Чтобы добавить эту ссылку с помощью VBA:

ThisWorkbook.VBProject.References.AddFromFile "C:\Program Files (x86)\SAS\SASHome\x86\SASAddinforMicrosoftOffice\7.1\SAS.OfficeAddin.tlb"
8
задан Joachim Sauer 1 April 2009 в 08:17
поделиться

8 ответов

Необходимо исследовать NIO Java ("Новый ввод-вывод") библиотека для неблокирования сетевого программирования. NIO была разработана для решения точно проблемы масштабируемости сервера, с которой Вы сталкиваетесь!

11
ответ дан 5 December 2019 в 05:19
поделиться

Хорошо масштабируемое программирование сокета в Java требует выбираемых каналов, обеспеченных в "Новом вводе-выводе" или пакетах NIO. При помощи неблокирования IO единственный поток может обслужить много сокетов, склоняясь только к тем сокетам, которые готовы.

Одно из более масштабируемых приложений NIO с открытым исходным кодом является Серым компонентом сервера приложений Glassfish. Jean-Francois Arcand записал много информативных, всесторонних сообщений в блоге о своей работе над проектом и покрывает много тонких ловушек в записи этого вида программного обеспечения с NIO.

Если понятие неблокирования IO в новинку для Вас, с помощью существующего программного обеспечения как Гризли, или по крайней мере с помощью него в качестве начальной точки для адаптации, могло бы быть очень полезным.

7
ответ дан 5 December 2019 в 05:19
поделиться

Преимущества NIO спорны. См. записи в блоге Paul Tyma здесь и здесь.

6
ответ дан 5 December 2019 в 05:19
поделиться

Модель потоков для каждого подключения потоком (Блокирующий Сокет ввод-вывод) не масштабируется слишком хорошо. Вот введение в NIO Java, которая позволит Вам использовать неблокирующиеся вызовы сокета в Java: http://today.java.net/cs/user/print/a/350

Как в статье говорится, существует много платформ, доступных, таким образом, Вы не имеете к самокрутке.

4
ответ дан 5 December 2019 в 05:19
поделиться

Как ранее упомянуто, 10 000 клиентов не легко. Для Java NIO (возможно увеличенный с отдельным пулом потоков для обрабатывания каждого запроса, не блокируя поток NIO) является обычным способом обработать большое количество клиентов.

Как упомянуто, в зависимости от реализации, потоки могли бы на самом деле масштабироваться, но она во многом зависит от сколько взаимодействия, там между соединениями клиента. Серьезные потоки, более вероятно, будут работать, если будет мало синхронизации между потоками.

Тем не менее NIO известно трудно получить, 100% исправляются в первый раз, когда Вы реализуете ее.

Я рекомендовал бы или испытание или по крайней мере рассмотрение источника для lib NIO Naga по naga.googlecode.com. Кодовая база для lib является маленькой по сравнению с большинством других платформ NIO. Необходимо смочь быстро реализовать тест, чтобы видеть, можно ли разбудить 10 000 клиентов и выполнения.

(Источник Naga также, оказывается, свободен изменить или скопировать, не приписывая исходного автора),

2
ответ дан 5 December 2019 в 05:19
поделиться

Это не простой вопрос, но для очень подробно (извините, не в Java, хотя), ответ видит это: http://www.kegel.com/c10k.html


Править

Даже с nio, это - все еще трудная проблема. 10 000 соединений являются огромной нагрузкой ресурса на машине даже при использовании неблокирующихся сокетов. Поэтому большие веб-сайты имеют фермы сервера и подсистемы балансировки нагрузки.

1
ответ дан 5 December 2019 в 05:19
поделиться

Почему Вы не обрабатываете только определенное количество запросов за один раз.

Скажем, Вы хотите обработать максимум 50 запросов за один раз (для того, чтобы не создавать слишком много потоков)

Вы создаете пул потоков 50 потоков.

Вы помещаете все запросы в Очередь (примите соединения, сохраните сокеты открытыми), и каждый поток, когда он сделан, добирается, следующий запрос затем обрабатывают его.

Это должно масштабироваться более легко.

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

1
ответ дан 5 December 2019 в 05:19
поделиться

Лично я бы предпочел создать настраиваемую неблокирующую настройку ввода-вывода, например, используя один поток для приема клиентов и другой поток для их обработки (проверка наличия ввода и запись данные на выход при необходимости).

0
ответ дан 5 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: