powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring websocket user notifications
25 сообщений из 36, страница 1 из 2
Spring websocket user notifications
    #38953279
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро !

Возникло два вопроса , и две задачки с которыми я только начал разбираться, поэтому нужна помощь и совет :)

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

2) Хочется делать это через WS , точнее через wss как я понимаю это гарантия того что данный обмен пройдет через любой прокси .

Теперь задача :

Есть два типа сообщений :
первое - это {"status":"ok" , "message":"text"} его приоритет 1
....
второе - это {blob ~10kb} его приоритет 10


раз в 1 секунду отправлять всем пользователям первое сообщение .
Как реализовать ?

простой цикл по всем пользователям которые приконектилсь ?
Допустим что for по 100_000 быстро .... но можно как то уровнять всех пользователей ?

как распараллелить или форнуть такой цикл ?

Второе

нужно как то организовать очередь в которую другой процесс будет класть эти самые сообщения,
при этом если в очередь попало сообщение с приоритетом выше чем сейчас отсылается - нужно перестать рассылать это сообщение .

И начать рассылать сообщение с большим приоритетом ... опять же таки с форком - на всех .... чтобы все пользователи получали сообщения одновременно ...

Идеи ...

1) создать некую очередь с приоритетом,(какую коллекцию выбрать?)
2) создать ExecutorService - потоков на 500 чтобы распараллелить for на 100_000 для быстрой отправки ....
3) как то протестировать все это,чтобы убедиться что ExecutorService и форк будет быстрее это делать,
чем простой цикл от 1 до 100_000 ?
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953306
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас 100К пользователей, то начните с того что у вас это всё должно крутится в кластере и прикиньте сколько клиентов сможет обслуживать одна нода. 100К на ноду звучит маловероятно.
И когда будет примерно понятно сколько держит одна нода, тогда и можно задуматься, действительно ли есть смысл форкать нотификацию, ведь это займет больше CPU ресурсов, отнимая их у других задач пользователей, либо достаточно одного цикла в потоке.


Atum1Допустим что for по 100_000 быстро .... но можно как то уровнять всех пользователей ?
Да - UDP

Atum1как распараллелить или форнуть такой цикл ?
Java 7 ForkJoin ?

Atum11) создать некую очередь с приоритетом,(какую коллекцию выбрать?)
java.util.PriorityQueue ? Только я бы ещё подумал над тем не взять ли полноценную MQ? Нужно ли персистить очередь, например?

Atum12) создать ExecutorService - потоков на 500 чтобы распараллелить for на 100_000 для быстрой отправки ....

А сколько ядер будет у сервера?

Atum13) как то протестировать все это,чтобы убедиться что ExecutorService и форк будет быстрее это делать,
чем простой цикл от 1 до 100_000 ?
На выделеном сервере. Можно в облаке десяток машин поднять, например, в качестве клиентов.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953391
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, спасибо :)

с самого малого - как в примере изменить логику - чтобы отправка шла от сервера в клиентов - и к примеру каждую секунду возвращала время всем клиентам кто зашел на страницу ?

http://spring-projects.ru/guides/messaging-stomp-websocket/
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953508
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
посмотри как вариант https://github.com/TooTallNate/Java-WebSocket
но рассылать каждую секунду время - это не правильно - на каждой машине есть свои часы и довольно стабильные , достаточно один раз при соединении послать время и на каждом клиенте при получении времени выводит его с учётом разницы
при 100к клиентах ты не сможещь гарантировать точность отправки в 1 сек.
даи напрягать сервер такой бессмысленной нагрузкой не верно
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953535
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
спасибо !

по поводу PriorityQueue

что то я сломал видимо :

просто поменял порядок- и все - [9, 8, 6, 7, 3, 2, 5, 1, 4] как такое может быть???

Код: java
1.
2.
3.
4.
5.
6.
testPriorityQueue
[10, 9, 6, 7, 8, 2, 5, 1, 4, 3]
poll : 10
[9, 8, 6, 7, 3, 2, 5, 1, 4]
peek : 9
[9, 8, 6, 7, 3, 2, 5, 1, 4]





Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    @Test
    public void testPriorityQueue() {
        System.out.println("testPriorityQueue");
         List<Integer> list =  IntStream.rangeClosed(1, 10).boxed().collect(Collectors.toList());
        
         
         PriorityBlockingQueue<Integer> integerPriorityQueue = new PriorityBlockingQueue<>(list.size(), ( i1,  i2) -> i2.compareTo(i1) );
         integerPriorityQueue.addAll(list);
         
        
        System.out.println(integerPriorityQueue);
        System.out.println("poll : "+integerPriorityQueue.poll());//Удаление
        System.out.println("peek : "+integerPriorityQueue.peek());//Получение 
        System.out.println(integerPriorityQueue);
    }
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953574
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяно рассылать каждую секунду время - это не правильно - на каждой машине есть свои часы и довольно стабильные , достаточно один раз при соединении послать время и на каждом клиенте при получении времени выводит его с учётом разницы
при 100к клиентах ты не сможещь гарантировать точность отправки в 1 сек.
даи напрягать сервер такой бессмысленной нагрузкой не верно

Это как самый простой тест - который пришел в голову - чтобы видеть лаг ...

а так конечно - при коннекте я буду отправлять серверное время и раз 10 секунд буду его синхронизировать с серверным .
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953735
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора так конечно - при коннекте я буду отправлять серверное время и раз 10 секунд буду его синхронизировать с серверным .
ты думаешь , что за десять сек изменится стабильность часов?
достаточно 1 раз при коннекте и всё, или один раз в сутки, если подключение клиентов постояное.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953744
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при 100к клиентаху тебя не получится отправлять время на любого клиента с с переодичностью 10 сек. этот период будет иметь большую погрешность чем уход часов клиента за 10 сек. и поэтому у тебя время на клиенте будет скакать.
если тебя важно фиксировать время прихода сообщения клиенту- ты можешь к сообщению добавлять время сервера (т.е. всремя отправки сообщения) а на клиенте и корректировать или ещё как использовать.
стабильность времени на клиенте и сервере одинаковое. может отличаться только абсолютная величина , а она будет постоянна если клиент не переведёт время
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953827
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
у него время чисто как тест вместо сообщения. Чтобы не слать Привет Мир! ))
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953834
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1это гарантия того что данный обмен пройдет через любой прокси .
порт должны будут открыть админы, т.к. протокол работает не на обычном порту.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953841
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадя,
у него время чисто как тест вместо сообщения. Чтобы не слать Привет Мир! ))
вообще интересно если б проект Flightradar24 перевели на ws какой бы стала нагрузка на него?
потому как по https://ru.wikipedia.org/wiki/Flightradar24 ajax не справляется
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953867
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяajax не справляется
AJAX это чисто клиент. Поэтому фраза не справляется сервер не катит.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953875
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
UPS я понял твою фразу. По ссылке написано))
IMHO самое неудобное - порты для WS.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953878
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
зашёл на сайт. Там же ГУГЛ - API.
Это конечно, тяжеловесно и не чистое WS\AJAX.
У меня на сайте такое же от Оракла
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953918
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AJAX я думаю для меня не катит ...
а вот пример с stomp + MessageBroker
http://spring-projects.ru/guides/messaging-stomp-websocket/

понравился ,

прочитал про проект

http://habrahabr.ru/post/187822/

вроде в пером приближении подходит ...

главное набросать макетик ...
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953934
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадя,
IMHO самое неудобное - порты для WS.
расскрой смысл написанного...
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953936
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяPetro123вадя,
IMHO самое неудобное - порты для WS.
расскрой смысл написанного...
17614123
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953939
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1это гарантия того что данный обмен пройдет через любой прокси .
порт должны будут открыть админы, т.к. протокол работает не на обычном порту.
Где почитать? Википедия пишет что по 80му.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953946
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадяпропущено...

расскрой смысл написанного...
17614123

да, с этим соглашусь. тут надо оценить затраты и преимущества. в общем открыть один порт не является большой дырой в безопасности.
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953952
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

думал так можно отправить время ... но что то Scheduled не вызывается ? в чем проблема?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Controller
public class WsController {

    @Autowired
    private  MessageSendingOperations<String> messagingTemplate;
    
    @Scheduled(fixedDelay = 1000)
    public void sendQuotes() {
           System.out.println("sendQuotes");
            String destination = "/topic/greetings";
            this.messagingTemplate.convertAndSend(destination, Calendar.getInstance().getTime().toString());
        
    }
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953954
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
а можно все завернуть в wss по 443 ?

или 8080, 8081 ?
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953961
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1вадя,
а можно все завернуть в wss по 443 ?

или 8080, 8081 ?

можно исползовать любой порт, лишь бы он не входил в конфликт с уже имеющимися обработчиками портов
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953962
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczГде почитать? Википедия пишет что по 80му.
наверно ты прав. У меня разрыв мозга по данному вопросу. Имею двоякую инфу)).
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953964
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяможно исползовать любой порт, лишь бы он не входил в конфликт с уже имеющимися обработчиками портов
тут надо подробнее.
Т.к. админы часто всё закрывают кроме 80 (FTP\качалки торрент и т.д.)
...
Рейтинг: 0 / 0
Spring websocket user notifications
    #38953965
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1вадя,

думал так можно отправить время ... но что то Scheduled не вызывается ? в чем проблема?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Controller
public class WsController {

    @Autowired
    private  MessageSendingOperations<String> messagingTemplate;
    
    @Scheduled(fixedDelay = 1000)
    public void sendQuotes() {
           System.out.println("sendQuotes");
            String destination = "/topic/greetings";
            this.messagingTemplate.convertAndSend(destination, Calendar.getInstance().getTime().toString());
        
    }


а просто передать сообщение ты можешь?
сам канад работает?
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring websocket user notifications
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]