|
|
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Доброе утро ! Возникло два вопроса , и две задачки с которыми я только начал разбираться, поэтому нужна помощь и совет :) 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 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 10:01 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Если у вас 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 ? На выделеном сервере. Можно в облаке десяток машин поднять, например, в качестве клиентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 10:43 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо :) с самого малого - как в примере изменить логику - чтобы отправка шла от сервера в клиентов - и к примеру каждую секунду возвращала время всем клиентам кто зашел на страницу ? http://spring-projects.ru/guides/messaging-stomp-websocket/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 12:02 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Atum1, посмотри как вариант https://github.com/TooTallNate/Java-WebSocket но рассылать каждую секунду время - это не правильно - на каждой машине есть свои часы и довольно стабильные , достаточно один раз при соединении послать время и на каждом клиенте при получении времени выводит его с учётом разницы при 100к клиентах ты не сможещь гарантировать точность отправки в 1 сек. даи напрягать сервер такой бессмысленной нагрузкой не верно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 13:25 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадя, спасибо ! по поводу PriorityQueue что то я сломал видимо : просто поменял порядок- и все - [9, 8, 6, 7, 3, 2, 5, 1, 4] как такое может быть??? Код: java 1. 2. 3. 4. 5. 6. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 13:43 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадяно рассылать каждую секунду время - это не правильно - на каждой машине есть свои часы и довольно стабильные , достаточно один раз при соединении послать время и на каждом клиенте при получении времени выводит его с учётом разницы при 100к клиентах ты не сможещь гарантировать точность отправки в 1 сек. даи напрягать сервер такой бессмысленной нагрузкой не верно Это как самый простой тест - который пришел в голову - чтобы видеть лаг ... а так конечно - при коннекте я буду отправлять серверное время и раз 10 секунд буду его синхронизировать с серверным . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 14:02 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
автора так конечно - при коннекте я буду отправлять серверное время и раз 10 секунд буду его синхронизировать с серверным . ты думаешь , что за десять сек изменится стабильность часов? достаточно 1 раз при коннекте и всё, или один раз в сутки, если подключение клиентов постояное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 15:46 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
при 100к клиентаху тебя не получится отправлять время на любого клиента с с переодичностью 10 сек. этот период будет иметь большую погрешность чем уход часов клиента за 10 сек. и поэтому у тебя время на клиенте будет скакать. если тебя важно фиксировать время прихода сообщения клиенту- ты можешь к сообщению добавлять время сервера (т.е. всремя отправки сообщения) а на клиенте и корректировать или ещё как использовать. стабильность времени на клиенте и сервере одинаковое. может отличаться только абсолютная величина , а она будет постоянна если клиент не переведёт время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 15:54 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадя, у него время чисто как тест вместо сообщения. Чтобы не слать Привет Мир! )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 16:52 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Atum1это гарантия того что данный обмен пройдет через любой прокси . порт должны будут открыть админы, т.к. протокол работает не на обычном порту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 16:58 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Petro123вадя, у него время чисто как тест вместо сообщения. Чтобы не слать Привет Мир! )) вообще интересно если б проект Flightradar24 перевели на ws какой бы стала нагрузка на него? потому как по https://ru.wikipedia.org/wiki/Flightradar24 ajax не справляется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 17:03 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадяajax не справляется AJAX это чисто клиент. Поэтому фраза не справляется сервер не катит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 17:27 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадя, UPS я понял твою фразу. По ссылке написано)) IMHO самое неудобное - порты для WS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 17:30 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадя, зашёл на сайт. Там же ГУГЛ - API. Это конечно, тяжеловесно и не чистое WS\AJAX. У меня на сайте такое же от Оракла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 17:35 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
AJAX я думаю для меня не катит ... а вот пример с stomp + MessageBroker http://spring-projects.ru/guides/messaging-stomp-websocket/ понравился , прочитал про проект http://habrahabr.ru/post/187822/ вроде в пером приближении подходит ... главное набросать макетик ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:01 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Petro123вадя, IMHO самое неудобное - порты для WS. расскрой смысл написанного... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:18 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:21 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1это гарантия того что данный обмен пройдет через любой прокси . порт должны будут открыть админы, т.к. протокол работает не на обычном порту. Где почитать? Википедия пишет что по 80му. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:22 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвадяпропущено... расскрой смысл написанного... 17614123 да, с этим соглашусь. тут надо оценить затраты и преимущества. в общем открыть один порт не является большой дырой в безопасности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:26 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадя, думал так можно отправить время ... но что то Scheduled не вызывается ? в чем проблема? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:32 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадя, а можно все завернуть в wss по 443 ? или 8080, 8081 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:33 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Atum1вадя, а можно все завернуть в wss по 443 ? или 8080, 8081 ? можно исползовать любой порт, лишь бы он не входил в конфликт с уже имеющимися обработчиками портов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:40 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
BlazkowiczГде почитать? Википедия пишет что по 80му. наверно ты прав. У меня разрыв мозга по данному вопросу. Имею двоякую инфу)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:41 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
вадяможно исползовать любой порт, лишь бы он не входил в конфликт с уже имеющимися обработчиками портов тут надо подробнее. Т.к. админы часто всё закрывают кроме 80 (FTP\качалки торрент и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:43 |
|
||
|
Spring websocket user notifications
|
|||
|---|---|---|---|
|
#18+
Atum1вадя, думал так можно отправить время ... но что то Scheduled не вызывается ? в чем проблема? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. а просто передать сообщение ты можешь? сам канад работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2015, 18:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38953962&tid=2125443]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
181ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 450ms |

| 0 / 0 |
