Web Sockets - 向所有客户端发送消息
Posted
技术标签:
【中文标题】Web Sockets - 向所有客户端发送消息【英文标题】:Web Sockets - Send messages to all clients 【发布时间】:2014-07-19 21:05:53 【问题描述】:我对 Web Sockets 完全陌生,我已经将它们应用到我的聊天中,所以现在它看起来像这样:
<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>
它适用于一个客户,当我输入消息时,它会更新聊天框,但只更新我的,但我想为每个人(=所有打开聊天窗口的用户)更新它。那么如何使用 WebSockets 向所有客户端发送消息呢?
【问题讨论】:
【参考方案1】:您无法使用 websocket.org 回显服务器执行此操作 - 这只会回显您将其发送回发送者的任何内容。
您需要一个服务器来处理所有客户端的分发。使用发布和订阅消息模式最容易做到这一点:
所有聊天消息都发布到一个共同的主题,例如“myChatRoom_1”。
所有连接的客户端都向服务器表明他们对“myChatRoom_1”(即订阅)的消息感兴趣。
现在,当服务器收到“myChatRoom_1”的已发布事件时,它可以将其分发给所有订阅者。
查看this demo 以了解实际情况。
它基于Crossbar.io,一个开源应用程序路由器,它开箱即用地执行 PubSub,无需额外的后端。因此,如果您使用它,您只需对浏览器聊天客户端进行更改。 如果您想与您的 PHP 后端集成(例如,因为这会将聊天消息存储在某处),还有一个 PHP library 用于连接到 Crossbar.io。
完全披露:我在 Tavendo 工作,他们是 Crossbar.io 项目的维护者。
【讨论】:
感谢@gzost,但我已经使用修改后的 phpwebsockets 解决了它。但是我还有另一个问题,现在如果我想让它工作,我必须通过将php -q /server.php
提交给 CMD 来运行 websocket 服务器。但我不知道如何在某些主机上在线运行它。有没有办法让一些 php 文件在后台不间断运行?
我对 PHP 一无所知 - 抱歉 :(以上是关于Web Sockets - 向所有客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章
使用 socket.io 向特定客户端发送消息,同时套接字 id 快速变化