【问题标题】:Socket IO publish-subscribe model trickySocket IO 发布-订阅模型棘手
【发布时间】:2012-03-06 08:29:09
【问题描述】:

问题出在socket.io客户端。

我想首先创建未连接的套接字,并在分配所有侦听器后将其连接到服务器。由于存在一些依赖关系,因此无法在我的应用程序的某个位置同步设置侦听器。

我知道这对于 node.js 来说是很正常的行为!看看nodejs的sockets就知道了!我希望我的架构没有问题。 Socket io 缺少documentation 并且我找不到我想要的方法:

var socket = new io.Socket(); //creating empty socket.But this line does not work

//..... socket variable can be passed somewhere .....
//..... to another place in app .....

socket.on('message', callback);

//..... when everyone is ready and subscriben .....

socket.connect('some-url');

【问题讨论】:

  • var socket = new io.Socket(); //this does not work

标签: javascript node.js socket.io publish-subscribe


【解决方案1】:

如果我正确理解您的问题,如果您创建一个套接字而不立即连接,那么您添加到其中的所有事件侦听器在您连接后都会被忽略。那是废话,我还没有玩过socket,所以我无法验证它是否正确,但我有一个解决问题的方法

创建一个外观,您也可以添加所有侦听器,一旦您可以连接到服务器,连接,添加您的侦听器(这应该同步完成)并代理套接字通过您的外观调度的所有事件。

【讨论】:

  • 没有连接就无法创建套接字。自己试试吧!
【解决方案2】:

所以你想在发生事情时启动socket.connect()?所以一个经典的click 事件监听器是这样的:

$('#button').click(function() {
    socket.connect('some-url')
});

如果您只想在事件发生后收听消息,请执行以下操作:

socket.connect('some-url')
document.getElementById('button').onclick = function() {
    socket.on('message', function() {
        // Your stuff
    }
} 

【讨论】:

  • 一个小提示:这个“就绪”发生在客户端。解决方案可能更简单
  • 好吧,您必须与其他客户沟通才能知道您何时准备就绪。不幸的是,这样做的唯一方法是与连接到所有其他客户端的服务器交谈。所以只有服务器可以告诉你什么时候准备好,并且可以向你发送这样的事件。
  • 能否请您提供创建socket 实例的代码,一切都会很好!
  • .... 不,这不是很好。除非未连接,否则套接字无法接收“就绪”,并且不应在事件发生之前连接。让我编辑您的代码以显示“就绪”事件来自客户端
  • 主要问题是我无法创建一个不监听任何连接的套接字。我无法在代码的不同位置创建套接字并分配侦听器。然后连接socket。套接字在构造函数中连接,这是唯一的选择。这与 nodejs 中的所有其他套接字实现有很大不同
【解决方案3】:

我在 socket.io documentatuion 中找到了我想要的东西

他们写道,我们可以通过设置此配置在套接字构建时禁用连接到服务器:

自动连接默认为true

当你调用 io.connect() 时,Socket.IO 应该会自动与服务器建立连接。

所以现在我们构造对象并且它不会立即创建连接。

构造未连接的套接字后调用方法create()

我仍然不知道如何关闭连接。所以请关注更新

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 2015-06-10
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多