需要帮助/建议来开发发布者订阅模型。

时间:2013-04-24 14:55:13

标签: c#-4.0 design-patterns

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

1 个答案:

答案 0 :(得分:0)

您可以使用开箱即用的解决方案。它将为您节省大量的工作和问题,如可扩展性,安全性等。而且,相信我,这需要解决很多问题。

我为Realtime.co工作,我们正是这样做的。查看以下示例:https://github.com/RTWWorld/pubsub-examples/tree/master/Javascript

您可以在http://www.realtime.co获得免费帐户。

我们使用pub / sub模式,您可以在其中订阅或发布到频道。订阅频道的任何人都将收到在那里发布的数据。

以下是一段代码:

<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”,因此您也会收到该消息。如果您在多个浏览器上打开此示例,则所有浏览器都会收到消息。

希望这有帮助。