我需要一些关于流星的建议。我想将现有的express / node.js应用程序移到meteor框架上,以利用服务器存储 - MongoDB和框架的MVC特性。我的应用程序需要进行重大的重构。我当前的应用服务器与远程主机建立TCP连接,每秒都会发出字符串数据。此应用服务器处理来自远程主机的字符串数据,然后将其发送到应用客户端。由于meteor使用node.js,我认为这就像将当前应用服务器代码的部分TCP连接移动到流星服务器代码一样简单。这是一个坚实的逻辑还是在这种方法中草中有一条蛇?
当然总是尝试一下,看看会发生什么。我把这样的东西放在Meteor.startup()
中var net = Npm.require('net'),
dataStream = net.createConnection(5000,"localhost");
dataStream.setEncoding('utf8');
dataStream.on('data', function(data) {
var line = data.trim();
Messages.insert({name:"line",message: line, time:Date.now()});
});
我收到有关在光纤外部运行的Meteor代码的投诉。是否正确更新客户端和服务器可见的集合?我假设更新将保留在服务器上并推送到客户端,我将在那里显示更改。
答案 0 :(得分:5)
我遇到了完全相同的问题(实际上,我正在制作TCP服务器而不是客户端),但是通过在每个回调函数周围添加Meteor.bindEnvironment来解决它。像:
// ..set- and fire up a tcp server..
var server = net.createServer( Meteor.bindEnvironment( function ( socket ) {
// ..with a listener that processes the commands..
socket.addListener( "data", Meteor.bindEnvironment( function ( data ) {
// ..working with collections now just works!
} ) );
} ) ).listen( port );
有关此方法的详细说明,请参阅https://www.eventedmind.com/feed/meteor-what-is-meteor-bindenvironment。
答案 1 :(得分:2)
是的,这大致是它的工作原理。我刚刚完成了将一个expressjs应用程序移动到流星上,这就是我的表现。
我必须做的一些事情(而且我怀疑你需要:)
Npm.require('...')
代替require('...')
iron-router
来处理不同的服务器端路由app.get(..
等在铁路由器中创建服务器端路由更新:有关详细信息,请参阅Is there an easy way to convert an express app to meteor?。