1

我对 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 向所有客户端发送消息呢?

4

1 回答 1

1

您不能使用 websocket.org 回显服务器执行此操作 - 这只会回显您将其发送回发送者的任何内容。

您需要一个服务器来处理所有客户端的分发。使用发布和订阅消息模式最容易做到这一点:

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

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

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

看看这个演示,看看它的实际效果。

它基于Crossbar.io,一个开源应用程序路由器,开箱即用地执行 PubSub,无需额外的后端。因此,如果您使用它,您只需对浏览器聊天客户端进行更改。如果您想与您的 PHP 后端集成(例如,因为它将聊天消息存储在某处),还有一个用于连接到 Crossbar.io的PHP 库。

全面披露:我为 Crossbar.io 项目的维护者 Tavendo 工作。

于 2014-07-21T13:06:21.767 回答