2015-09-28 5 views
1

Я должен реализовать приложение чата с помощью websocket, пользователи будут общаться через группы, могут быть тысячи групп, и пользователь может быть в нескольких группах. Я думаю о двух решениях:Лучшая практика веб-рассылки для группового чата/одного веб-сайта для всех групп или одного веб-узла в группе?

[1] для каждого группового чата, я создаю конечную точку websocket (используя camel-атмосферу-websocket), пользователи из той же группы могут подписаться на конечную точку группы и отправить/получить сообщение над этой конечной точкой. это означает, что могут быть тысячи конечных точек websocket. Клиентская сторона (скажем, iPhone) должна подписаться на несколько конечных точек wbesocket. это хорошая практика?

[2] Я просто создаю конечную точку websocket для всех групп. Клиентская сторона только подписывается на эту конечную точку, и я сама управляю распределением сообщений на сервере: получаю членов группы, выбираю websocket каждого члена из списка подключенных веб-карт, а затем пишу сообщение каждому члену через websocket.

Какое решение лучше с точки зрения производительности и легко реализуется как на клиенте, так и на сервере?

Спасибо.


РЕДАКТИРОВАТЬ 2015-10-06

Я выбрал второй подход, и сделал тест с мол WebSocket клиентом, я использую верблюд атмосферу WebSocket на стороне сервера. С клиентской стороны я создаю соединения websocket с сервером в потоках. Проблема с причалом заключалась в том, что я могу создать около 160 соединений в сети (это означает около 160 потоков). В результате я почти не вижу разницы, когда число клиентов увеличивается от 1 до 160.

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

Если вы заинтересованы в тестовом коде, здесь: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html#d0e22545

ответ

4

Я думаю, что второй подход будет лучше использовать для повышения производительности. Я использую то же самое для своего приложения, но он все еще находится на этапе тестирования, поэтому не могу комментировать производительность в реальном времени. Теперь он работает на 10-15 групп и работает нормально. В моем приложении есть такое же состояние, как и вы, в котором пользователь может общаться на основе группы. Я обрабатываю создание группы на стороне сервера, используя node.js. Вот код для создания группы, но это для моего конкретного приложения. Просто вставьте сюда ссылку. Получение homeState и userId с передней панели. Создание группы на основе homeState. Этот код, например, не работает для вас. Для повышения производительности вы можете использовать clustering.

this.ConnectionObject = function(homeState, userId, ws) { 
      this.homeState = homeState; 
      this.userId = userId; 
      this.wsConnection = ws; 
     }, 

     this.createConnectionEntry = function(homeState, userId, 
       ws) { 

      var connObject = new ws.thisRefer.ConnectionObject(homeState, userId, 
        ws); 
      var connectionEntryList = null; 
      if (ws.thisRefer.connectionMap[homeState] != undefined) { 
       connectionEntryList = ws.thisRefer.connectionMap[homeState]; 
      } else { 
       connectionEntryList = new Array(); 
      } 
      connectionEntryList.push(connObject); 

      console.log(connectionEntryList.length); 

      ws.thisRefer.connectionMap[homeState] = connectionEntryList; 
      ws.thisRefer.connecteduserIdMap[userId] = ""; 

     } 
+0

Спасибо, я дам второй подход попробовать, я приму этот ответ, когда у меня получится результат теста нагрузки. –

 Смежные вопросы

  • Нет связанных вопросов^_^