2014-01-13 33 views
1

我需要關於流星的一些建議。我想將現有的express/node.js應用移到流星框架中,以利用服務器存儲 - MongoDB和框架的MVC特性。我的應用程序需要重大重構。我當前的應用程序服務器建立一個TCP連接到一個遠程主機,每秒吐出字符串數據。這個應用程序服務器處理來自遠程主機的字符串數據,然後將其發送給應用程序客戶端。既然meteor使用node.js,我會想象這將會像將當前應用服務器代碼那部分TCP連接移動到流星體服務器代碼一樣簡單。這是一種堅實的邏輯還是這種方法在草地上有一條蛇?從流星服務器建立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代碼的投訴。是否正在更新客戶端和服務器可見的集合?我假設更新將保留在服務器上,並推送到客戶端,我將有一個視圖來顯示更改。

+1

您必須在回調周圍使用'Meteor.bindEnvironment'才能使用光纖 – corvid

+0

您也可以在回調周圍使用'Meteor.wrapAsync'。 –

回答

1

是的,這大致是如何工作的。我剛剛完成了將一個expressjs應用程序移動到流星,這幾乎是我做到的。

有些事情我必須做的(而且我懷疑你需要:)

  • 使用Npm.require('...')代替require('...')
  • 使用iron-router來處理不同的服務器端路線
  • 每個使用app.get(..等在鐵路路由器上創建服務器端路由
  • 分別在快速路由中重新定義res/req以指向this.response/this.request,並將express定義爲特定函數再次合作基於底層中間件連接(例如,res.cookie(),req.header(),..)

更新:有關詳細信息,請參閱Is there an easy way to convert an express app to meteor?

4

我遇到了完全相同的問題(實際上,我是在製作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

+0

eventedmind鏈接中斷 – pajooh

+0

https://www.eventedmind.com/feed/meteor-what-is-meteor-bindenvironment –