如果任何客户端发布消息,我有 n 个客户端(例如典型的浏览器)连接到服务器,所有其他客户端都应该能够查看它 IE 阅读/回复消息。因此,任何客户端都可以是发布者和订阅者。经过一番调查,我发现观察者设计模式可能是一种可能的解决方案(可能是错误的)。有人能指出我正确的方向吗?
问问题
46 次
1 回答
0
您可以为此使用开箱即用的解决方案。它将为您节省大量工作和可扩展性、安全性等问题。而且,相信我,这需要解决很多问题。
我为 Realtime.co 工作,我们正是这样做的。在此处查看示例:https ://github.com/RTWWorld/pubsub-examples/tree/master/Javascript
您可以在http://www.realtime.co获得一个免费帐户。
我们使用发布/订阅模式,您可以在其中订阅或发布到频道。订阅频道的人将收到在那里发布的数据。
下面以一段代码为例:
<input type="text" id="mensagem" />
<input type="button" onclick="sendMessage();" value="Send" />
<div id="log"></div>
<script src="http://code.xrtml.org/xrtml-3.0.0.js"></script>
<script>
var appkey = 'YOUR_APP_KEY';
var url = 'http://ortc-developers.realtime.co/server/2.1';
var shoutbox;
xRTML.load(function(){
xRTML.Config.debug = true;
xRTML.ConnectionManager.create(
{
id: 'myConn',
appkey: appkey,
authToken: 'anything',
url: url,
channels: [
{name: 'user:channel_2'},
{name: 'user:channel_1'}
]
}).bind(
{
message: function(e) {
var log = document.getElementById('log');
log.innerHTML = log.innerHTML + '<br />' + e.message;
}
});
});
function sendMessage(){
var msg = document.getElementById('mensagem').value;
xRTML.ConnectionManager.sendMessage({
connections: ['myConn'],
channel: 'user:channel_2',
content: msg
});
}
</script>
当您单击“发送”按钮时,您将向频道“user:channel_2”发布一条消息。由于我们的代码同时订阅了“user:channel_1”和“user:channel_2”,您也会收到该消息。如果您在多个浏览器上打开此示例,所有浏览器都会收到该消息。
希望这可以帮助。
于 2013-04-24T15:17:48.270 回答