2015-04-28 66 views
0

我有一些设备(想想心率监视器),将原始TCP数据包发送到我的Meteor服务器。当它接收到数据时,它会写入到mongodb &,然后我将使用Meteor发布数据并将其无效化到客户端。听流星与原始TCP数据包

据我所知,sockJS不能做原始TCP数据包,所以我设置了一个net服务器来接收它们。该代码在纯节点的伟大工程,但是当我npmRequire我收到以下错误使用它:

Exception while invoking method 'startNet' TypeError: Object #<Object> has no method 'createServer' 

这里是我的代码:

Meteor.methods({ 
    'startNet': function (port) { 
    var net = Meteor.npmRequire('net'); 
    net.createServer(function (socket) { 
     console.log("connected"); 

     socket.on('data', function (data) { 
     console.log(data.toString()); 
     }); 
    }).listen(port); 
    } 
}); 

任何想法,为什么net变量返回一个空对象?

+0

凡含有这种方法的文件在什么位置? FWIW我不禁想着你会更好地在单独的应用程序中运行这个额外的服务器。它并不完全符合Meteor的优势 - 也许你可以在两个应用程序之间共享你的数据访问逻辑。 – Rajit

+0

在服务器文件夹...所以你建议1个纯节点的应用程序与流星共享一个数据库? –

+0

你必须在其他地方做错事。如果我放入'meteor shell'并运行'var net = Meteor.npmRequire('net');',那么生成的'net'对象具有'createServer'功能。所以这个问题似乎并没有在这里看到的代码。 –

回答

1

移动要求的方法的应该工作:

net = Meteor.npmRequire('net'); 

Meteor.methods({ 
    'startNet': function (port) { 
    net.createServer(function (socket) { 
     console.log("connected"); 
     socket.on('data', function (data) { 
     console.log(data.toString()); 
     }); 
    }).listen(port); 
    } 
}); 
+0

有趣的是,我做了一个新项目,只是将你的代码粘贴到一个服务器文件中。现在,当我运行该方法时,除了出现常见错误之外,服务器重新启动时出现'EBADF'错误。然而,基于你的评论,我试图运行一个'流星壳',并且我得到了一个'服务器不可用(等待重新连接)'的错误,所以我想知道这是否是Windows或防火墙问题。当我回到我的OSX机器时会更新你。感谢您的输入! –

+0

只是为了消除其他变量......你做的唯一其他变化是添加'meteorhacks:npm'并在'packages.json'文件中添加'“net”:“1.0.2”',对吗? –

+0

不,我没有添加任何东西到'packages.json'。 'net'是本地node.js的一部分,你不需要手动包含它。 –