2013-04-24 38 views
0

我有n个客户端(比如一个典型的浏览器)连接到服务器,如果任何客户端发布消息,所有其他客户端应该能够查看它IE浏览器/回复该消息。因此,任何客户端可以是发布者以及订阅者。经过一番调查,我发现了OBSERVER设计模式可能是一个可能的解决方案(可能是错误的)。任何人都可以指出我的方向是正确的吗?需要关于开发发行商订阅模型的帮助/建议。

+0

也许你可以使用[SignalR](http://signalr.net/)。 – Lee 2013-04-24 14:59:56

回答

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> 

当你点击“发送”按钮,您将发布消息通道“用户:channel_2”。由于我们的代码正在订阅“user:channel_1”和“user:channel_2”,您还将收到该消息。如果你在多个浏览器上打开这个例子,它们都会得到这个消息。

希望这会有所帮助。

+0

感谢您的建议,我一定会研究它。 – 2013-04-26 14:37:05