Веб-сокеты - отправляйте сообщения всем клиентам

Я совершенно новичок в веб-сокетах, я применил их к своему чату, и теперь он выглядит примерно так:

<script type='text/javascript'>
var connection = new WebSocket("ws://echo.websocket.org"); //"public" websocket server
     connection.onopen = function () {
        console.log('Connection: OK.');
     };
     connection.onerror = function (error) {
       console.log(Error: ' + error); 
     };
     connection.onmessage = function () {
        $('#chatbox').load('/chatbox.php');
     };
$(document).ready(function() {  

    $('#chatOK').click(function(event) {
     //something
     connection.send('Get new messages.'); 


    });     
});         
</script>

Это хорошо работает для одного клиента, когда я ввожу сообщение, оно обновляет окно чата, но только мое, но я хочу обновить его для всех (= всех пользователей, которые открыли окно чата). Итак, как я могу отправить сообщение с Web Sockets всем клиентам?

1 ответ

Вы не можете сделать это с эхо-сервером websocket.org - это просто выводит все, что вы отправляете обратно отправителю.

Вам нужен сервер, который обрабатывает рассылку всем клиентам. Это проще всего сделать, используя шаблон обмена сообщениями "Публикация и подписка":

Все сообщения чата публикуются в общей теме, например, "myChatRoom_1".

Все подключенные клиенты указывают серверу, что они заинтересованы в сообщениях на "myChatRoom_1" (это подписка).

Теперь, когда сервер получает опубликованное событие для "myChatRoom_1", он может распространить его среди всех подписчиков.

Взгляните на эту демонстрацию, чтобы увидеть это в действии.

Он основан на http://crossbar.io/, маршрутизаторе приложений с открытым исходным кодом, который делает PubSub "из коробки" без дополнительного бэкэнда. Поэтому, если вы воспользовались этим, вам нужно будет внести только изменения в клиенты чата вашего браузера. Если вы хотите интегрироваться с вашим бэкэндом PHP (например, так как это где-то хранит сообщения чата), есть библиотека PHP для подключения к Crossbar.io.

Полное раскрытие: я работаю на Тавендо, который поддерживает проект Crossbar.io.

Другие вопросы по тегам