【问题标题】:Making TCP connections from Meteor Server从 Meteor 服务器建立 TCP 连接
【发布时间】:2015-12-18 04:57:48
【问题描述】:

我需要一些关于流星的建议。我想将现有的 express/node.js 应用程序移至流星框架,以利用服务器存储 - MongoDB 和框架的 MVC 特性。我的应用程序需要进行重大重构。我当前的应用服务器与每秒吐出字符串数据的远程主机建立 TCP 连接。此应用服务器处理来自远程主机的字符串数据,然后将其发送到应用客户端。由于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 代码在光纤外运行的投诉。更新对客户端和服务器可见的集合是正确的方法吗?我假设更新将保留在服务器上并推送到客户端,在那里我将有一个视图来显示更改。

【问题讨论】:

  • 您必须在回调周围使用Meteor.bindEnvironment 才能使其与光纤一起使用
  • 你也可以在回调周围使用Meteor.wrapAsync

标签: node.js meteor


【解决方案1】:

我遇到了完全相同的问题(实际上,我是在制作 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

【讨论】:

    【解决方案2】:

    是的,这大概就是它的工作原理。我刚刚完成了将 expressjs 应用程序移动到流星的工作,这就是我所做的。

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

    • 使用Npm.require('...') 代替require('...')
    • 使用iron-router 处理不同的服务器端路由
    • 每次使用app.get(.. 等,在 Iron 路由器中创建一个服务器端路由
    • 在 express 路由中重新定义 res/req 以分别指向 this.response/this.request 并更改 express 定义的任何特殊函数以基于底层连接中间件(例如 res.cookie()、req.标头(),..)

    更新:更多详情请见Is there an easy way to convert an express app to meteor?

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2012-11-11
      • 2021-08-07
      • 2013-05-07
      • 2021-06-01
      相关资源
      最近更新 更多