有没有办法使用node& socketIo / express以某种方式将一个对象变量绑定到客户端,所以它的行为类似于反应性流星,并像流星一样保持同步?
换句话说,例如我在node.js脚本中有一个JSON对象变量:
var marksObject = {
firstValue : 'this is the first value' ,
secondValue : 'this is the second value'
};
我正在寻找一种简单的方法,让marksObject似乎同时出现在客户端和节点服务器中。因此,如果在客户端或节点服务器上发生更改,则更改似乎在两个位置都发生。
理想情况下,这只涉及几行代码,我不必编写任何东西来手动保持客户端和节点服务器同步。
Redis看起来非常有趣,但对我正在尝试的东西来说似乎有些过分。
非常感谢你。答案 0 :(得分:4)
似乎deepstream.io只需要很少的努力即可为我们做到这一点。
deepstream服务器:
var DeepstreamServer = require('deepstream.io');
var server = new DeepstreamServer();
server.set('host', '192.168.123.123');
server.set ('port', 6020 );
server.set ('tcpPort', 6021 );
// this is the default, but its a nice reminder
server.start();
节点“客户端”(在服务器上运行但行为与客户端一样):
var deepstream = require('deepstream.io-client-js');
ds = deepstream( '192.168.123.123:6021' ).login();
// port has to match tcpPort or just use 6021
record = ds.record.getRecord( 'clientRecord' );
record.set('clientField', 'test from the node client running on the server! ');
record.subscribe ('clientField' , function (value) {
console.log('subscribed value: ' + value)
});
浏览器“客户端”将在一个或多个浏览器中运行
<script type='text/javascript' src='deepstream.min.js'></script>
<script type='text/javascript'>
ds = deepstream( '192.168.123.123:6020' ).login();
record = ds.record.getRecord( 'clientRecord' );
record.set ('clientField', 'test test from a browser!');
record.subscribe ('clientField' , function (value) {
console.log('subscribed value: ' + value)
});
// for fun, enter record.get('clientField'); in the console too
// and also enter record.set('clientField', 'this is what i entered in the console!');
</script>
答案 1 :(得分:0)
只需用getter和setter编写一些包装器类。并在“设置”上向另一方发送更新。