Мне нужно реализовать приложение чата с использованием websocket, пользователи будут общаться через группы, могут быть тысячи групп, а пользователь может быть в нескольких группах. Думаю о 2 решениях:
[1] для каждого группового чата я создаю конечную точку websocket (используя camel -mosphere-websocket), пользователи в той же группе могут подписаться на конечную точку группы и отправлять / получать сообщения через эту конечную точку. это означает, что могут быть тысячи конечных точек websocket. Клиентская сторона (скажем, iPhone) должна подписаться на несколько конечных точек wbesocket. это хорошая практика?
[2] Я просто создаю одну конечную точку websocket для всех групп. Клиентская сторона просто подписывается на эту конечную точку, и я сам управляю распределением сообщений на сервере: получаю участников группы, выбираю веб-сокет каждого члена из списка подключенных веб-сокетов, затем пишу сообщение каждому члену через веб-сокет.
Какое решение лучше с точки зрения производительности и его легко реализовать как на клиенте, так и на сервере?
Спасибо.
ИЗМЕНИТЬ 06.10.2015
Я выбрал второй подход и провел тест с клиентом jetty websocket, я использую websocket с верблюжьей атмосферой на стороне сервера. На стороне клиента я создаю подключения к серверу через веб-сокеты в потоках. Возникла проблема с причалом: я могу просто создать около 160 подключений к веб-сокетам (это означает около 160 потоков). В результате я почти не вижу разницы при увеличении количества клиентов с 1 до 160.
Да, 160 - это не большое число, но я думаю, что проведу больше тестов, когда действительно увижу проблему с производительностью, на данный момент я согласен со вторым подходом.
Если вас интересует тестовый код, вот он: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html#d0e22545