Веб-сокеты - отправляйте сообщения всем клиентам
Я совершенно новичок в веб-сокетах, я применил их к своему чату, и теперь он выглядит примерно так:
<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.