Web套接字 - 向所有客户端发送消息

时间:2014-07-19 21:05:54

标签: sockets websocket phpwebsocket

我对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 个答案:

答案 0 :(得分:1)

您无法使用websocket.org echo服务器执行此操作 - 无论您将其发送回发件人,都可以回复。

您需要一台处理所有客户端分发的服务器。这是使用Publish&amp; amp;订阅消息传递模式:

所有聊天消息都发布到一个共同主题,例如“myChatRoom_1”。

所有连接的客户端都向服务器表明他们对“myChatRoom_1”(即订阅)的消息感兴趣。

现在,当服务器收到“myChatRoom_1”的已发布事件时,它可以将其分发给所有订阅者。

请查看this demo以查看此操作。

它基于Crossbar.io,一个开源应用程序路由器,开箱即用PubSub,没有额外的后端。因此,如果您使用此功能,则需要仅对浏览器聊天客户端实施更改。 如果您想与PHP后端集成(例如,因为这会在某处存储聊天消息),也可以使用PHP library连接到Crossbar.io。

完全披露:我为Tavendo工作,他是Crossbar.io项目的维护者。