2012-03-06 159 views
0

问题出在socket.io客户端。Socket IO发布订阅模式棘手

我想先创建未连接的套接字,并在分配所有的监听器后将其连接到服务器。监听器不能在我的应用程序中的一个地方同步设置,因为存在一些依赖关系。

我知道这是非常正常的行为正常的node.js!只要看看nodejs的套接字!我希望我的架构没有问题。插座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'); 
+0

'var socket = new io.Socket(); //这是行不通的# – Dan 2012-03-06 11:51:33

回答

1

所以,你要开始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 
    } 
} 
+0

小记:这个“准备好”发生在客户端。解决方案可能更简单 – Dan 2012-03-06 08:43:10

+0

那么,您必须与其他客户沟通,以了解何时准备就绪。不幸的是,要做到这一点的唯一方法是与连接到所有其他客户端的服务器通话。所以只有服务器可以告诉你什么时候你准备好了,并且可以向你发送这样的事件。 – 2012-03-06 08:49:30

+0

您能否给出创建'socket'实例的代码,一切都会很棒! – Dan 2012-03-06 09:18:49

1

如果我正确理解你的问题,如果你创建一个没有立即连接的套接字,你添加到它的所有事件监听器一旦连接就会被忽略。这将是废话,我还没有玩过套接字,所以我不能验证它是否是真的,但我有问题的解决方案

创建一个门面,您也可以添加所有听众,一旦你abale连接到服务器,连接,添加您的监听器(这应该是同步完成的),并通过您的外观代理套接字分派的所有事件。

+0

没有连接就无法创建套接字。自己试试! – Dan 2012-03-06 12:22:58

+0

是的,创建一个门面是一个好主意。这是最后一次救援 – Dan 2012-03-06 12:23:54

0

我发现我是在socket.io documentatuion

他们写的,我们可以通过设置这个配置禁止连接到插座建设的瞬间服务器寻找:

自动连接默认为true

当您调用io.connect()时,如果Socket.IO自动与服务器建立连接。

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

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

我仍然不知道如何关闭的连接。因此,注意更新