我使用 dnode
我已阅读 StackOverflow: Send message from server to client with dnode
并了解
dnode 使用对称协议,因此任何一方都可以定义对方可以调用的函数。
正如@substack 作者回复的那样。
所以,现在,我有如下代码:
服务器.js
var HTTPserver = httpServer('/www')
.listen(9999, function()
{
console.log('HTTP listening 9999');
});
var dnode = require('dnode');
var shoe = require('shoe')(
function(stream)
{
var TCPserver = require('net')
.createServer()
.listen(5005, function()
{
console.log('TCP listening 5005');
})
.on('connection', function(socket)
{
console.log('TCPsocket connected');
var d = dnode(
{
});
d.on('remote', function(remote)
{
remote.test();
});
d
.pipe(stream)
.pipe(d);
socket.end();
})
.on('end', function()
{
console.log('TCPsocket disconnected');
});
})
.install(HTTPserver, '/dnode');
客户端.js
var shoe = require('shoe');
var stream = shoe('/dnode');
var dnode = require('dnode');
var d = dnode(
{
test: function()
{
console.log('hello');
}
});
d.on('remote', function(remote)
{
console.log('connnected');
});
d.pipe(stream)
.pipe(d);
基本上,我想调用function:test -> hello从服务器启动。
但是,我看到的结果是
d.on('remote', function(remote)
{
console.log('connnected');
});
@client 被评估。
d.on('remote', function(remote)
{
remote.test();
});
@server 永远不会被评估。
这是为什么?
当然,也许我可以使用客户端->服务器->客户端回调方法来解决问题,但如果可能的话,我只想为我未来的工作提供一种直接的方式。
谢谢。