2013-04-24 41 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