我对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发送消息到所有的客户端?
你不能用websocket.org回显服务器这样做——它只是回显你发送给发送者的任何内容。
你需要一个服务器来处理分发到所有客户端。使用Publish &订阅消息传递模式:
所有的聊天消息都发布到一个共同的主题,例如:"myChatRoom_1"。
所有连接的客户端都向服务器表明它们对发送到"myChatRoom_1"的消息感兴趣(这是订阅)。
现在,当服务器收到"myChatRoom_1"的已发布事件时,它可以将其分发给所有订阅者。
看一下这个演示,看看它是如何工作的。
它基于Crossbar。io是一个开源的应用路由器,它可以开箱即用,不需要额外的后端。因此,如果使用这种方法,则只需要对浏览器聊天客户端进行更改。如果你想集成你的PHP后端(例如,因为它存储聊天消息的地方),有一个PHP库连接到Crossbar。
完全披露:我为Tavendo工作,他们是Crossbar的维护者。io项目。