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 - 向所有客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sockets 发送和接收数据

通过 socket.id 向客户端发送消息

使用 socket.io 向特定客户端发送消息,同时套接字 id 快速变化

Web服务端怎么发送消息给Android客户端了,Android客户端又怎么接收发来的消息了

使用 Web Socket 向客户端发送消息

[VB.NET]Upnp/udp打孔聊天程序tcp/udp sockets