我希望我的客戶端指定一個謂詞函數,該函數根據函數的參數返回True或False。服務器使用此功能並將其應用於某些數據。使用node.js + socket.io從客戶端向服務器發送JavaScript函數
我提出的解決方案不是一個很好的解決方案。我使用瀏覽器的function.toString()方法並在服務器端調用eval()。除了明顯的安全隱患之外,它似乎並不乾淨。
我使用socket.io進行通信,並且傳遞對象是完全無縫的。有沒有辦法做到這一點的功能?
我希望我的客戶端指定一個謂詞函數,該函數根據函數的參數返回True或False。服務器使用此功能並將其應用於某些數據。使用node.js + socket.io從客戶端向服務器發送JavaScript函數
我提出的解決方案不是一個很好的解決方案。我使用瀏覽器的function.toString()方法並在服務器端調用eval()。除了明顯的安全隱患之外,它似乎並不乾淨。
我使用socket.io進行通信,並且傳遞對象是完全無縫的。有沒有辦法做到這一點的功能?
我想你想要的是https://github.com/substack/dnode。它根本不使用.toString,但可以讓你調用遠程函數並以自然的方式獲得結果。看看例子!
編輯:我忘了提及,dnode使用下面的socket.io。
無需重塑這裏的輪子,Dnode正是你要找的東西,因爲你可以遠程調用服務器 - 客戶端之間的功能:
例子:
服務器
var express = require('express');
var app = express.createServer();
app.use(express.static(__dirname));
app.listen(8080);
console.log('http://localhost:8080/');
// then just pass the server app handle to .listen()!
var dnode = require('dnode');
var server = dnode({
zing : function (n, cb) { cb(n * 100) }
});
server.listen(app);
客戶端
...
window.onload = function() {
DNode.connect(function (remote) {
remote.zing(66, function (n) {
document.getElementById('result').innerHTML = n;
});
});
};
結帳更多的例子在這裏:約DNode這裏https://github.com/substack/dnode/tree/master/examples
這看起來不錯,但有沒有辦法定義在客戶端的功能,並讓服務器運行呢?我看到的所有示例都是服務器端函數。 – 2011-12-20 09:14:28
是的,這是可能的,Now.JS做到了。它也使用引擎蓋下的socket.io。 – BRampersad 2011-12-20 13:13:44
dnode使用SockJS而不是socket.io。 – Mitar 2012-12-09 04:28:27