2015-04-28 68 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的一部分,你不需要手動包含它。 –