2012-03-06 108 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()

我仍然不知道如何關閉的連接。因此,注意更新