从meteor服务器build立TCP连接

我需要一些关于meteor的build议。 我想将现有的express / node.js应用程序移到meteor框架中,以利用服务器存储 – MongoDB和框架的MVC性质。 我的应用程序需要一个重大的重构。 我目前的应用程序服务器build立TCP连接到一个远程主机,每秒吐出string数据。 这个应用程序服务器处理来自远程主机的string数据,然后将其发送到应用程序客户端。 由于meteor使用node.js,我想这将是简单的移动我的当前应用程序服务器代码的TCP连接进入meteor服务器代码的一部分。 这是一个坚实的逻辑还是在草地上有一条蛇?

当然,总是尝试一下,看看会发生什么。 我把这样的东西放在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代码的投诉。 正在更新一个客户端和服务器可见的集合是否正确的方式去这里? 我假设更新将保持在服务器上,并推送到客户端,我将有一个视图来显示更改。

我遇到了完全相同的问题(实际上,我正在制作一个TCP服务器而不是客户端),但是通过在每个callback函数周围添加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

是的,这大概是如何工作的。 我刚刚完成了将一个expressjs应用程序移动到meteor,这几乎是我做的。

我必须做的一些事情(我怀疑你需要:)

  • 使用Npm.require('...')代替require('...')
  • 使用iron-router来处理不同的服务器端路由
  • 对于每个使用app.get(..等)在铁路路由器中创build一个服务器端路由
  • 在expresspath中重新定义res / req,分别指向this.response / this.request,并根据底层的连接中间件(例如res.cookie(),req.header())更改express定义的特殊函数, ,..)

更新:有关更多详细信息,请参阅是否有将快速应用程序转换为meteor的简单方法? 。