Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
В нетбинзе сделал по гайду простой сервер, принимающий сокет-подключения.
Приложение по дефолту деплоится на GF 4.0
Все работает.

Пробуй проверить сколько коннектов может создать.
На клиенте в js создаю массив и туда в цикле пихаю new WebSocket.
То есть открываешь страницу и она в js генерит коннекты к приложению.

1. коннекты создаются довольно медленно
2. затыкается стабильно на 191-ом коннекте и дальше будто ничего не происходит.
На сервере в javax.websocket.OnOpen после 191 подключения ничего не приходит, на клиенте в try catch ничего не падает.

Вопросы
1. куда копать, почему 190 и все?
2. как правильно проверить максимальное число подключений?
3. если число подключений ограничено, какая стратегия работы с websocket?
4. как защититься от генерации большого числа коннектов на открытом для общего доступа сайте?

Изначально вопрос возник отсюда.
Можно все делать на том же ajax и опрашивать сервер например 1 раз в сек, данные для ответа брать из кэша приложения (чтобы не лазить по каждому запросу в БД), но не уверен, что это нормальный подход и не знаю какую нагрузку можно держать при таком варианте.
Поэтому интересно посмотреть в сторону вебсокетов, чтобы не опрашивать сервер кучей сессий каждую секунду, а отправлять клиентам инфу по мере ее готовности на сервере.

Сообщение было отредактировано: 13 мар 20, 22:44
13 мар 20, 22:43    [22098911]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
JDS
1. куда копать, почему 190 и все?
Кроме (возможных) настроек сервера приложений, если еще лимиты операционной системы и браузера (я бы поставил на браузер, да и проверить это легко: запустить два )
JDS
4. как защититься от генерации большого числа коннектов на открытом для общего доступа сайте?
так никто в интернетах вебсокеты без необходимости (если не нужен "риалтайм") не использует: https://en.wikipedia.org/wiki/Push_technology
14 мар 20, 00:59    [22098946]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
Андрей Панфилов
так никто в интернетах вебсокеты без необходимости (если не нужен "риалтайм") не использует:
а зря, это наиболее простой метод и самый экономичныйс точки зрения трафика, нагрузки на сервер.
JDS
1. коннекты создаются довольно медленно
где измеряется? и как измеряется эта медленность?
JDS
2. затыкается стабильно на 191-ом коннекте и дальше будто ничего не происходит.
что за операционка?
у ws ограничение в ~65к подключений на 1 ip порт.

JDS
4. как защититься от генерации большого числа коннектов на открытом для общего доступа сайте?
какая проблема? любой сайт - это http подключение, раз на сервере рыба - у java есть сессия - вот и привяжи сессию ws к сессии http, можно несколько сессий ws к одной сессии http, чтоб можно было открывать несколько страниц в разных вкладках.
14 мар 20, 12:18    [22099017]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Я не понимаю тестовых условий. GF - это GlassFish?
191 физический сокет это мало. Если клиент - это понятно зачем. Нефик.
Если сервер - что за операционка? Если GlassFish - что за настройки?
Java в явном виде не ограничивает количество сетевых сокетов.

Вобще очень полезно для понимания проблемы прикладывать
сводку о конфигурации.
14 мар 20, 12:50    [22099027]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
вадя
это наиболее простой метод и самый экономичный с точки зрения трафика, нагрузки на сервер.
и самый unreliable
14 мар 20, 13:20    [22099036]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
Андрей Панфилов
вадя
это наиболее простой метод и самый экономичный с точки зрения трафика, нагрузки на сервер.
и самый unreliable
ты просто не умеешь их готовить.
14 мар 20, 16:07    [22099078]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
Да. Ограничение похоже, что в браузерах. В фоксе не дает больше 190, в хроме - 260.
Ну допустим.
Вопрос гор. и вертик. масштабируемости все равно актуален.
65К подключений это немало, но и немного.
Информация обрывочная, целостной картины не собрать. Кто-то пишет про мультиплексоры, которые распределяют коннекты по разным портам что ли. Кто-то про балансировщики. Кто-то прикручивает до кучи брокеры. Но в итоге якобы догоняют количество коннектов до 1млн на одной машине.
А так да пока винда и гласфиш.

Сообщение было отредактировано: 16 мар 20, 17:09
16 мар 20, 17:09    [22100060]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
JDS

65К подключений это немало, но и немного.

AFAIK ограничение протокола TCP/IP

JDS

Но в итоге якобы догоняют количество коннектов до 1млн на одной машине.

AFAIK тогда, теоретически, нужно кол-во адресов TCP/IP увеличивать
Ну и если сервер выдержит, то еще вопрос, выдержит ли роутер/свитчь )))

Но вообще, громоздить все на одну машину - странное желание. Для какого нибудь балансира/мультиплексора ресурсов особо не требуется. Проще выкинуть на отдельный аппаратный сервер уровня Arduino ))) IMHO ))) дешево, надежно и сердито.

Ну и понятное дело, что только NIO. При классических сокетах и "обычном" (TM) Linux, сервера уже при > 10 тыс. потоков сдыхать начинают. AFAIK
16 мар 20, 17:33    [22100071]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
Вопрос гор. и вертик. масштабируемости все равно актуален.
тему топика меняй
16 мар 20, 17:41    [22100076]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
JDS
Да. Ограничение похоже, что в браузерах. В фоксе не дает больше 190, в хроме - 260.
Ну допустим.
Вопрос гор. и вертик. масштабируемости все равно актуален.
65К подключений это немало, но и немного.
Информация обрывочная, целостной картины не собрать. Кто-то пишет про мультиплексоры, которые распределяют коннекты по разным портам что ли. Кто-то про балансировщики. Кто-то прикручивает до кучи брокеры. Но в итоге якобы догоняют количество коннектов до 1млн на одной машине.
А так да пока винда и гласфиш.

Ты понимаешь что одновременное количество сокетов - это суть одновременное количество работающих Threads?

Ты хотябы 100 вычислительных потоков попробуй запусти. У тебя от этого поплывёт CPU. И никакой более
ползеной работы этот CPU не сделает. Он будет в спинах и локах висеть на самом деле.

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

Зачем они висят? Просто жрут память? Для справки любой сокет требует буфера памяти. Такова есть
природа TCP/IP. Ему буфер нужен. Буфер! Чтобы шум из эфира собирать в цельные стримы. Здесь каждая
ОС по своему выделяет. Но ты просто попробуй 64000 сокетов создать на любой машине. И потом
расскажи как эта машина себя чувствует.
16 мар 20, 17:41    [22100077]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
вадя
у ws ограничение в ~65к подключений на 1 ip порт.
я ведь не зря это написал
ведь можно тот же томкат использовать на несколько портов( кроме 80 или 8080) и на каждый порт ещЁ по 65к ws портов...
16 мар 20, 17:45    [22100083]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
mayton

Ты понимаешь что одновременное количество сокетов - это суть одновременное количество работающих Threads?

---

NIO
16 мар 20, 18:29    [22100128]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Leonid Kudryavtsev
mayton

Ты понимаешь что одновременное количество сокетов - это суть одновременное количество работающих Threads?

---

NIO

Этот ответ столь же полезен и прекрасен для автора как панацея для средневекового доктора.
16 мар 20, 19:15    [22100161]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
В NIO нет связи соккет=поток. 6-20 потоков (если считать и служебные) вполне могут разгребать тысячи сокетов одновременно (мой код точно 600-800 и более одновременно в продакшене держал, для JVM было выделяно вроде 4 ядра)
16 мар 20, 19:42    [22100177]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
И, вроде, в I-net'е гуглится, что лимита особого и нет. Просто все упирается в память.

"There isn’t a useful hard limit, as you run into various problems long before you hit numerical restrictions, and it depends on the hardware — memory, number of cores, the network interfaces, etc."
16 мар 20, 19:45    [22100179]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Флаг в руки. Веди автора до конца.
16 мар 20, 19:51    [22100182]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
Leonid Kudryavtsev
В NIO нет связи соккет=поток.
И не в NIO, внезапно, тоже.
16 мар 20, 19:52    [22100183]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
mayton
А если твоя задача такова что на самом деле полезной работы не делается а сокеты просто висят
(для красоты) то наверное тогда надо архитектуру приложения пересмотреть.
ну ws жрут меньше чем http сессия.
mayton
Зачем они висят? Просто жрут память? Для справки любой сокет требует буфера памяти. Такова есть
природа TCP/IP. Ему буфер нужен. Буфер! Чтобы шум из эфира собирать в цельные стримы. Здесь каждая
ОС по своему выделяет. Но ты просто попробуй 64000 сокетов создать на любой машине. И потом
расскажи как эта машина себя чувствует.
вот это и интересно с точки зрения возможностей и ограничений.
на SO писали что у них висят сессии по 1.5 года. и как бы они не парятся (хотя, скорее всего, это просто отвалившиеся клиенты, и SO не проверяет их пин-понгом). если б это было слишком накладно , то они, наверно, позакрывали б такие сессии .

mayton
то наверное тогда надо архитектуру приложения пересмотреть.
если рассматривать ws как канал обмена с веб страницей - то страница живёт не слишком долго - время сессии 30 минут - то и нет смысла держать коннект ws дольше чем http сессия. ну а сколько может быть подключений клиентов http к серверу - информация не секретная.
16 мар 20, 21:10    [22100196]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10009
JDS
Вопрос гор. и вертик. масштабируемости все равно актуален.
65К подключений это немало, но и немного.
Сокет это две пары: src-ip:src-port и dst-ip:dst-port.
Для HTTP и многих других протоколов пара dst-ip:dst-port фиксирована.
Дальше включаем банальную логику и получаем тривиальный вывод: даже когда провайдер спрятал за NAT на одном (единственном) IP-адресе ~16К клиентов, "немного" это "более чем достаточно". Почему 16К? Потому, что есть рекомендации по распределению портов по диапазонам.
В любом случае вам, как владельцу сервиса, должно быть покласть на проблемы клиентов за конкретным провайдером. В данном конкретном случае - совершенно объективно.
17 мар 20, 09:05    [22100340]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
вадя

на SO писали что у них висят сессии по 1.5 года. и как бы они не парятся (хотя, скорее всего, это просто отвалившиеся клиенты, и SO не проверяет их пин-понгом). если б это было слишком накладно , то они, наверно, позакрывали б такие сессии .

Надо понять какой смысл они туда вкладывали. Java-объект сессий? Вполне возможно. Он еще и персистится.
Сокет? Не знаю. Мы живем в эпоху сильной виртуализации всего стека. Выше писали что сокет это просто
пара значений хосты и порты. И чтобы эта пара жила 1.5 года - надо чтобы клиент висел 1.5 года (и провадер
не менял ему арендованый IP) либо здесь имеет место хитрая виртуализация (proxy, nat, socks) которая
на надёжном железе просто виртуализирует внешние соединения замещая их своими фейковыми
адресами. И если железо 1.5 года не ремонтировалось и не патчилось и не перегружалось (во что мне
сложно поверить т.к. даже амазон падает и часто) то вполне возможно что мы получим такую
статистику. Хорошо это или плохо - я не знаю. Но мне кажется что к надёжности это имет
мало отношения. Ведь надёжность должна быть до "последней мили" а не на фрагменте
маршрута.

Помните анекдот про то как пули вылетели из ствола? Вот 1.5 года из этой же серии.
17 мар 20, 17:24    [22100806]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
mayton
Надо понять какой смысл они туда вкладывали. Java-объект сессий? Вполне возможно.......
для меня этот факт был очень удивителен. они объясняли так,что компы просто не выключались всё это время.....
в итоге я оставил это всё на совести SO. и просто информирую о данном факте.
из своего опыта - ws очень надёжная и очень удобная вещь.
17 мар 20, 17:50    [22100821]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
Leonid Kudryavtsev
В NIO нет связи соккет=поток. 6-20 потоков (если считать и служебные) вполне могут разгребать тысячи сокетов одновременно (мой код точно 600-800 и более одновременно в продакшене держал, для JVM было выделяно вроде 4 ядра)

Не понимаю как это выглядит внутри программы?
Предполагается, что приложение может обрабатывать все данные в одном потоке или в нескольких, это не суть, главное, что оно складывает потом все данные в общий буфер.
И потом это приложение должно раскидывать всем подключенным клиентам ту часть информации, которая их касается.
То есть каждый коннект (в основном) не генерит на сервере какой-то отдельный вычислительный поток с отдельным запросом.
И забирать информацию из буфера можно тем же http через каждую секунду например, но это кажется накладным, а сокеты видятся хорошим вариантом с точки зрения идеологии, но затык в масштабируемости, который не пойму как обходится и обходится ли.
18 мар 20, 16:49    [22101584]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Предполагается, что приложение может обрабатывать все данные в одном потоке или в нескольких, это не суть, главное, что оно складывает потом все данные в общий буфер.
И потом это приложение должно раскидывать всем подключенным клиентам ту часть информации, которая их касается.
То есть каждый коннект (в основном) не генерит на сервере какой-то отдельный вычислительный поток с отдельным запросом.
И забирать информацию из буфера можно тем же http через каждую секунду например, но это кажется накладным, а сокеты видятся хорошим вариантом с точки зрения идеологии, но затык в масштабируемости, который не пойму как обходится и обходится ли.
похоже ты совсем не понял что такое ws.
серверная часть состоит из "слушателя порта ws" - т.е. одна точка входа.
 public void OnMessage(String data, Session userSession) {
....
}

в этом методе ты можешь распарсить String data выделить команду и передать управление методу который соответствует этой команде и соответственно передать сами данные , а так же передать Session userSession , как правило клиенту надо ответить (что не обязательно).
а как метод/команда будет работать - это уже твоя воля.
это простой вариант.
более сложный - это когда идет рассылка по нескольким клиентам. но это отдельная тема.

никакого буфера не требуется и никаких таймеров для забора из этого буфера
18 мар 20, 17:14    [22101606]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
похоже ты совсем не понял что такое ws.
серверная часть состоит из "слушателя порта ws" - т.е. одна точка входа.
 public void OnMessage(String data, Session userSession) {
....
}

в этом методе ты можешь распарсить String data выделить команду и передать управление методу который соответствует этой команде и соответственно передать сами данные , а так же передать Session userSession , как правило клиенту надо ответить (что не обязательно).
а как метод/команда будет работать - это уже твоя воля.
это простой вариант.
более сложный - это когда идет рассылка по нескольким клиентам. но это отдельная тема.

никакого буфера не требуется и никаких таймеров для забора из этого буфера


Возможно, я неправильно объяснил суть.
Буфер нужен для того, чтобы не лазить каждый раз в БД.
То есть безотностительно с WS работа или по HTTP.
То есть оперативная информация на клиент уходит только из буфера.
И обновление этой информации идет централизованно приложением и может идти в один поток в том числе, то есть не зависит от пользователей.
То есть:
1. идет некий процесс в приложении
2. данные из п.1 фиксируются в БД
3. по этим данным обновляется буфер
4. при обновлении буфера идет рассылка клиентам.
5. если подключается новый клиент, он не идет в БД, а забирает данные из буфера приложения

В целом от этого пока можно абстрагироваться, так как не касается сути вопроса по большому счету.

Что касается работы с WS-ми, да, точка входа одна:
+
package com.test.whiteboardapp;

import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value="/whiteboardendpoint", encoders = {FigureEncoder.class}, decoders = {FigureDecoder.class})
public class WSEndpoint {    
    private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>());
    
    @OnMessage
    public void broadcastFigure(Figure figure, Session session) throws IOException, EncodeException {
        System.out.println("broadcastFigure: " + figure);
        for (Session peer : peers) {
            if (!peer.equals(session)) {
                peer.getBasicRemote().sendObject(figure);
            }
        }
    }

    @OnClose
    public void onClose (Session peer) {
        peers.remove(peer);
    }
    
    @OnOpen
    public void onOpen (Session peer) {
        peers.add(peer);
    }
}

Но как понимаю, здесь это для разработчика использующего javax.websocket она одна, но на входе есть Session - который и отражает собственно коннект по WS, и каждый клиент - это как минимум, один коннект.
Или я не прав? )

Сообщение было отредактировано: 18 мар 20, 17:52
18 мар 20, 17:49    [22101646]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Буфер нужен для того, чтобы не лазить каждый раз в БД.
это что за боязнь?
JDS
То есть безотностительно с WS работа или по HTTP.
тогда про буфер вообще не следовало упоминать, это дело твоей конкретно логики работы кода.
JDS
Но как понимаю, здесь это для разработчика использующего javax.websocket она одна, но на входе есть Session - который и отражает собственно коннект по WS, и каждый клиент - это как минимум, один коннект.
Или я не прав? )
прав.
вот только это
@OnMessage
    public void broadcastFigure(Figure figure, Session session) throws IOException, EncodeException {
        System.out.println("broadcastFigure: " + figure);
        for (Session peer : peers) {
            if (!peer.equals(session)) {
                peer.getBasicRemote().sendObject(figure);
            }
        }
    }

введёт в ступор тех кто будет разбираться в коде после тебя. я бы рекомендовал типа такого

@OnMessage
    public void OnMessage(Figure figure, Session userSession) {
SendMessage();
        }

public void SendMessage() {
       for (Session peer : peers) {
            if (!peer.equals(session)) {
                peer.getBasicRemote().sendObject(figure);
            }
        }
    }


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

и Figure figure что это?
ws понимает строковые и бинарные данные (по умолчанию) или ты используешь какой-то подпротокол?

Сообщение было отредактировано: 18 мар 20, 18:21
18 мар 20, 18:17    [22101672]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя, просто пример из туториала.
Figure - что-то типа обертки над json, а в @ServerEndpoint указываем классы encoders = {FigureEncoder.class}, decoders = {FigureDecoder.class}
Figure:
+
package com.test.whiteboardapp;

import java.io.StringWriter;
import javax.json.Json;
import javax.json.JsonObject;

public class Figure {
    private JsonObject json;

    public Figure(JsonObject json) {
        this.json = json;
    }

    public JsonObject getJson() {
        return json;
    }

    public void setJson(JsonObject json) {
        this.json = json;
    }

    @Override
    public String toString() {
        StringWriter writer = new StringWriter();
        Json.createWriter(writer).write(json);
        return writer.toString();
    }
}

FigureEncoder:
+
package com.test.whiteboardapp;

import javax.websocket.EncodeException;
import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;

public class FigureEncoder implements Encoder.Text<Figure>{
    @Override
    public String encode(Figure figure) throws EncodeException {
        return figure.getJson().toString();
    }

    @Override
    public void init(EndpointConfig ec) {
        System.out.println("init");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

FigureDecoder:
+
package com.test.whiteboardapp;

import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonException;
import javax.json.JsonObject;
import javax.websocket.DecodeException;
import javax.websocket.Decoder;
import javax.websocket.EndpointConfig;

public class FigureDecoder implements Decoder.Text<Figure> {
    @Override
    public Figure decode(String string) throws DecodeException {
        JsonObject jsonObject = Json.createReader(new StringReader(string)).readObject();
        return  new Figure(jsonObject);
    }

    @Override
    public boolean willDecode(String string) {
        try {
            Json.createReader(new StringReader(string)).readObject();
            return true;
        } catch (JsonException ex) {
            ex.printStackTrace();
            return false;
        }
    
    }

    @Override
    public void init(EndpointConfig ec) {
        System.out.println("init");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}


Сообщение было отредактировано: 18 мар 20, 18:47
18 мар 20, 18:47    [22101701]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
это что за боязнь?

Скорее, желание сделать оптимальнее.
Приложение само шуршит с данными и от того, что юзеры будут постоянно дергать его, залезая в БД, быстрее оно не выполнит.
Все-таки буферизация где она уместна - это вполне нормально по-моему.
18 мар 20, 18:53    [22101713]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
вадя
счас у тебя получается Что сообщение от каждого рассылается каждому
а кроме как простой рассылки?
18 мар 20, 18:54    [22101715]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Скорее, желание сделать оптимальнее.
Приложение само шуршит с данными и от того, что юзеры будут постоянно дергать его, залезая в БД, быстрее оно не выполнит.
Все-таки буферизация где она уместна - это вполне нормально по-моему.
ну если только по конкретному случаю
18 мар 20, 18:55    [22101719]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
вадя
счас у тебя получается Что сообщение от каждого рассылается каждому
а кроме как простой рассылки?

Не понимаю вопрос.
Как и куда копать в поиске ответа на топик.
19 мар 20, 00:40    [22101858]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
если число подключений ограничено, какая стратегия работы с websocket?
для какой задачи?
19 мар 20, 07:26    [22101890]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Не понимаю вопрос.
в твоём примере 22101646 показана только рассылка входного сообщения от одного клиента всем остальным.
а как у тебя организованы другие действия? выполнить обработку полученного сообщения ? и прочее.
JDS
Как и куда копать в поиске ответа на топик.
а что значит "Раздушить по количеству ..."
ты хочешь от одного клиента иметь кучу коннектов?
19 мар 20, 07:27    [22101891]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
в твоём примере показана только рассылка входного сообщения от одного клиента всем остальным.
а как у тебя организованы другие действия? выполнить обработку полученного сообщения? и прочее.

Есть конечно и запросы с персональными ответами и для них меня вполне устроил бы http, но вопрос возникает при массовом обновлении данных на клиентах: зачем постоянно долбить сервер кучей запросов, проверяя не появились ли новые данные.
вадя
а что значит "Раздушить по количеству ...", ты хочешь от одного клиента иметь кучу коннектов?

Нет. Коннекты один к одному.
Basil A. Sidorov
Сокет это две пары: src-ip:src-port и dst-ip:dst-port.
Для HTTP и многих других протоколов пара dst-ip:dst-port фиксирована.
Дальше включаем банальную логику и получаем тривиальный вывод: даже когда провайдер спрятал за NAT на одном (единственном) IP-адресе ~16К клиентов, "немного" это "более чем достаточно". Почему 16К? Потому, что есть рекомендации по распределению портов по диапазонам.
В любом случае вам, как владельцу сервиса, должно быть покласть на проблемы клиентов за конкретным провайдером. В данном конкретном случае - совершенно объективно.

Возможно, я не понимаю, что мне пытались сказать уже несколько раз
Я видимо неверно понял, что на сервере в целом ограниченное число портов с потолком 65К?
Правильно ли, что сервер без всяких плясок может принять условно 16К подключений с одного IP, 16К с другого, с третьего и так далее?
Если да, тогда вопрос действительно в ресурсах.
Но и горизонтальное масштабирование все равно актуально, т.к. не можем бесконечно увеличивать память.
И тогда если говорить про горизонтальное масштабирование, то приложение видимо, должно быть построено для работы в кластере.
То есть нужен балансировщик (какой и как он работает в контексте WS пока не представляю, то есть как он будет/должен раскладывать запросы/ответы по сети между узлами). Возникает вопрос и с синхронизацией узлов или должна быть некая центральная нода где лежат общие данные (тот же общий буфер например), то есть узлы главным образом для поддержки бОльшего количества подключений, с вычислениями легко справится и одна машина.

Сообщение было отредактировано: 19 мар 20, 09:07
19 мар 20, 09:07    [22101906]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Есть конечно и запросы с персональными ответами и для них меня вполне устроил бы http, но вопрос возникает при массовом обновлении данных на клиентах: зачем постоянно долбить сервер кучей запросов, проверяя не появились ли новые данные.
и опять - для чего тебе ws?
JDS
Раздушить
это что означает?
19 мар 20, 09:29    [22101912]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
зачем постоянно долбить сервер кучей запросов, проверяя не появились ли новые данные.
у тебя скоро рекорд.
Будет три страницы, но непонятно, что за куча запросов и зачем клиенту долбить 5 раз в сек сервер?
19 мар 20, 09:35    [22101913]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Мне тоже до сих пор непонятна ни архитектура ни нагрузка.
Что вообще обсуждается? Какой сценарий?
19 мар 20, 11:01    [22101961]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
и опять - для чего тебе ws?

Чтобы обновлять данные странице клиента не по запросу пользователя и не периодическими http-запросами в фоне.
вадя
Раздушить это что означает?

Потому что почти на всех уровнях упираешься в ограничения (у браузера, возможно, на веб-сервере, операционка, сам протокол, количество памяти). А например, условный ориентир держать 1-2млн коннектов.
PetroNotC Sharp
непонятно, что за куча запросов и зачем клиенту долбить 5 раз в сек сервер?

В том и дело, что не охота долбить )
Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?

Сообщение было отредактировано: 19 мар 20, 11:05
19 мар 20, 11:05    [22101967]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1802
JDS

Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?


Если именно с сервера на клиент - https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
19 мар 20, 11:15    [22101975]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
В том и дело, что не охота долбить )
Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?
есть.
Только когда юз кейс использования дождемся?
Тупишь?
19 мар 20, 11:15    [22101976]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
Захотелось программисту, написал кучу кода.
А сам ни бе ни ме ни кукареку. Внятно объяснить зачем написал, не может.
19 мар 20, 11:19    [22101977]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Мне кажется - это как диалог двух блондинок. Он ведётся на тонком уровне.
Не только на словах. А на уровне жестов. Мимики и недвусмысленных намёков.

Вобщем я сейчас себя ощутил тупым сексистским мужланом который не может
понять диалог жены и подруги по телефону.
19 мар 20, 11:24    [22101983]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10009
JDS
Правильно ли, что сервер без всяких плясок может принять условно 16К подключений с одного IP, 16К с другого, с третьего и так далее?
Опять мимо. Сервер может принять столько подключений, насколько у сервера хватит ресурсов. Как эти подключения распределяются по IP-адресам и прочему - вас не колышет и колыхать не должно.
19 мар 20, 11:38    [22102001]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
Lelouch
JDS

Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?


Если именно с сервера на клиент - https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events

Посмотрел https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events.
Ну это php и там так же используется коннект, то есть возможно семантика не веб-сокеты, но внутри так понимаю, все равно сокеты? )

PetroNotC Sharp
Только когда юз кейс использования дождемся?

Аналогично. В который раз озвучиваю )
Есть допустим 100тыс. клиентов.
Им надо обновлять данные на странице.
Если каждый из них будет слать раз в секунду http-запрос, считаю это не очень нормальным.
Поэтому смотрю в сторону WS, но там упираемся в лимиты по количеству коннектов.
Какие точно и на каких уровнях, не знаю. Изначально столкнулся вот с ограничениями в браузере, но это пока ладно.
Что не понятного в том, что изложил? )
19 мар 20, 11:45    [22102021]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
JDS

Если каждый из них будет слать раз в секунду http-запрос, считаю это не очень нормальным.

Я тоже считаю это не очень нормальным.

Поэтому смотрю в сторону WS, но там упираемся в лимиты по количеству коннектов.
Какие точно и на каких уровнях, не знаю. Изначально столкнулся вот с ограничениями в браузере, но это пока ладно.
Что не понятного в том, что изложил? )

Вывод не верный.

Каким образом твои рассуждения довели тебя до WS - непонятно. Ограничения в браузере - забей.
Никто в браузере так не работает как ты изобразил. Бери среднего пользователя а не маргинала
и не тестовый стенд по нагрузке.
19 мар 20, 11:52    [22102030]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
Что не понятного в том, что изложил? )

1. Какого рода у них программа на экране?
2. 100000 клиентов придумал? Что было до этого?
19 мар 20, 11:58    [22102038]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
mayton
Ограничения в браузере - забей. Никто в браузере так не работает как ты изобразил. Бери среднего пользователя а не маргинала и не тестовый стенд по нагрузке.

Это понятно, что никто так не работает и на браузер забил. Но что возможными с лимитами на других уровнях у меня представления нет.
19 мар 20, 12:00    [22102045]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
PetroNotC Sharp
1. Какого рода у них программа на экране?
2. 100000 клиентов придумал? Что было до этого?

Эммм ) 1. Браузер. 2. Гипотетически.

Сообщение было отредактировано: 19 мар 20, 12:00
19 мар 20, 12:01    [22102047]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
PetroNotC Sharp
пропущено...

1. Какого рода у них программа на экране?
2. 100000 клиентов придумал? Что было до этого?

Эммм ) 1. Браузер. 2. Гипотетически.
все ясно.
Вопросы архитектуры не решаются гипотетически.
Так как:
"Один дурак может задать столько вопросов что и 100 мудрецов не ответят" [(с) В.И. Ленин ПСС том 8 стр.15, работа "Как нам преобразовать РабКрин"]
Удачи!
19 мар 20, 12:03    [22102048]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS,
Аксиома:
В форуме легче помогают, если у ТС реальная проблема.
19 мар 20, 12:07    [22102051]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
JDS
mayton
Ограничения в браузере - забей. Никто в браузере так не работает как ты изобразил. Бери среднего пользователя а не маргинала и не тестовый стенд по нагрузке.

Это понятно, что никто так не работает и на браузер забил. Но что возможными с лимитами на других уровнях у меня представления нет.

Смотри. Мы здесь можем еще 100 страниц флуда написать. Но ты должен нас нагнуть (!) реальным примером.
С исходниками клиента и сервера. И с моделированием нагрузки.

Архитектуры разрабатываются итеративно. Тоесть по принципу многоходовочки. Сделал. Проверил на перформанс.
Увидел. Проанализировал. Пофиксил. И снова по кругу. И ни один "диванный эксперт и оналитик" тебе здесь за
одну итерацию никакого решения не выдаст. Решение - это даже не 1-2 варианта. Это - дерево развития. Где
в каждом узле - 100500 направлений куда двигаться.

Улавливаешь?
19 мар 20, 12:14    [22102060]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
PetroNotC Sharp, что нереального в вопросе реализации 100тыс коннектов по wss?
19 мар 20, 12:14    [22102061]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
mayton
Архитектуры разрабатываются итеративно. Тоесть по принципу многоходовочки. Сделал. Проверил на перформанс.
Увидел. Проанализировал. Пофиксил. И снова по кругу. И ни один "диванный эксперт и оналитик" тебе здесь за
одну итерацию никакого решения не выдаст. Решение - это даже не 1-2 варианта. Это - дерево развития. Где
в каждом узле - 100500 направлений куда двигаться.

Улавливаешь?

Именно ) И можно сказать, что на первой итерации у меня такой вот тупой вопрос, который в итоге наверно можно сформулировать и так: как смоделировать 100тыс коннектов на одной машине, в одном веб-приложении по ws под видной или в линуске?
Если это заведомо нереально, значит следующая итерация с поиском реальных вариантов )

Сообщение было отредактировано: 19 мар 20, 12:20
19 мар 20, 12:17    [22102064]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
PetroNotC Sharp, что нереального в вопросе реализации 100тыс коннектов по wss?
тебе приснились эти коннекты. Чё я буду на сны отвечать.
19 мар 20, 12:42    [22102087]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
что на первой итерации
первая итерация это демка на 100 юзверей.
Показывай.
19 мар 20, 12:44    [22102090]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
JDS
как смоделировать 100тыс коннектов на одной машине, в одном веб-приложении по ws под видной или в линуске?

Вот тебе ссылка JMeter https://jmeter.apache.org/
Качай разбирайся.

Вот еще статья где описывается плагин https://www.blazemeter.com/blog/jmeter-websocket-samplers-a-practical-guide/
Там должен быть режим тестирования веб-сокетных приложений.
19 мар 20, 12:45    [22102091]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
mayton, классно, спасибо, поковыряю.
19 мар 20, 13:10    [22102126]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS,
для начала необходимо проверить 60к коннектов к серверу на линуксе (на любом , по вкусу)
а потом делать выводы
19 мар 20, 14:03    [22102168]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1802
JDS,

Нет, внутри не сокеты. Обычный http запрос.
19 мар 20, 15:00    [22102243]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Java Ответить