2011-11-14 64 views
1

有沒有一種方法可以定義自定義function (name,data,callback),然後在客戶端發送函數調用時由socket.io調用?Socket.IO:調用自定義函數,而不是使用socket.on

而不是使用socket.on(name,function(data,callback){...}) socket.io應該調用我的函數。這將使得實現每個socket.io函數所需的邏輯變得更容易,並且我不需要在每個連接上爲整個rpc函數堆調用socket.on

我檢查了socket.io維基,但沒有找到任何相關的。

我知道我可以在socket.io之上實現一個「rpc服務器」,但最好使用socket.io的原生方式。

socket.on('rpc',function(data,callback){ /* e.g. data.name for function name, data.data for the actual data */}); 

回答

3

不知道我是否得到它。你不能這樣做嗎?

服務器:

function handleMessage(name, data, callback) { 
    // ... 
} 

// listen on all kind of messages 
socket.on('message', handleMessage); 

客戶:

socket.send(name, data, callback); 

這種方式,您只需使用Socket.IO作爲WebSockets的包裝。

如果你正在尋找更多的花式,也許你應該檢查出nowjsdnode

+0

'socket.send'只支持2個參數:數據和回調。不過回調被竊聽(這裏提交bug報告:https://github.com/LearnBoost/socket.io/issues/645)。我實際上就像你現在所建議的那樣(使用bugfix)。我用'socket.json.send([name,data],cb)''發送。 (json消息標誌) – Eliasdx

+0

嗯,也許'發送'不應該有回調,我不知道。你總是可以恢復到「發射」狀態,因爲無論如何你只需要一個綁定,將來很容易就可以改變它。除了美學之外,不使用「排放」的其他原因? –

+0

???它是如何假設服務器端的handleMessage()函數*能夠在客戶端調用'callback' * *? – cibercitizen1