节点在服务器和服务器之间共享数据客户

时间:2016-03-22 23:16:39

标签: javascript json node.js

有没有办法使用node& socketIo / express以某种方式将一个对象变量绑定到客户端,所以它的行为类似于反应性流星,并像流星一样保持同步?

换句话说,例如我在node.js脚本中有一个JSON对象变量:

var marksObject = {
    firstValue   : 'this is the first value' ,
    secondValue  : 'this is the second value'
};

我正在寻找一种简单的方法,让marksObject似乎同时出现在客户端和节点服务器中。因此,如果在客户端或节点服务器上发生更改,则更改似乎在两个位置都发生。

理想情况下,这只涉及几行代码,我不必编写任何东西来手动保持客户端和节点服务器同步。

Redis看起来非常有趣,但对我正在尝试的东西来说似乎有些过分。

非常感谢你。

2 个答案:

答案 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编写一些包装器类。并在“设置”上向​​另一方发送更新。