2013-02-09 44 views
1

我正在使用socket.io,並試圖從我的服務器發出一個事件,並將一個具有函數的對象作爲參數傳遞給它。這裏是我的代碼:如何發送一個事件並將一個函數作爲參數傳遞給socket.io

socket.emit('customEvent', { 
    name : "Test". 
    myFunc : function() { 
     //some logic here 
    } 
    }); 

,然後在客戶端(我的應用程序在瀏覽器中),我能夠訪問「名」屬性,但是當我嘗試訪問「myFunc的」,但我得到「未定義」吧。這裏是我的代碼

socket.on('customEvent', function(data){ 
    data.myFunc(); 
}); 

這是什麼正確的方法(如果有可能的話)?

回答

3

數據以JSON形式傳輸,因此它不能包含函數。也許你正在尋找socket.io's documentation中所謂的'確認'?

// server 
socket.on('customEvent', function (data, fn) { 
    fn(data.x) 
}) 

// client 
socket.emit('customEvent', { x: 1 }, function(){ 
    // ... 
}) 
0

你可以序列化你的函數,也許這對某些函數是危險的。但是socket.io只將字符串轉換爲純字符串或JSON。從服務器端收到字符串函數時,您可以嘗試對其進行評估。

注意:代碼不低於測試:

function hello() { 
    return "Hello Cruel World"; 
} 

socket.emit('send-function', { myFunc : hello.toString() }); 

...

在服務器端:

socket.on('send-function', data) { 
    console.log(eval(data.myFunc)); 
} 

嘗試在此代碼,並給我們一個反饋,如果它的工作原理。

相關問題