[英]Communicate between a Rails app and a Node.js app
這個問題遵循前一個問題: 我應該使用Node.js而不是Rails用於實時WebApps嗎?
問題:
在Rails應用程序和Node.js應用程序之間進行通信的最佳方式是什么才能利用這兩種技術?
謝謝
為什么不在節點和RoR之間打開TCP套接字進行通信?
var net = require('net');
// create TCP server
var server = net.createServer(function (socket) {
// write down socket
socket.write("Echo server\r\n");
socket.pipe(socket);
})
// start server listening on port 8124
server.listen(8124, "127.0.0.1");
在RoR中,您可以連接到套接字
require 'socket' # Sockets are in standard library
hostname = '127.0.0.1'
port = 8124
s = TCPSocket.open(hostname, port)
while line = s.gets # Read lines from the socket
puts line.chop # And print with platform line terminator
end
s.close # Close the socket when done
然后在這個TCP套接字的頂部寫一個抽象,以便很好地同步你的通信,而不需要低級別的擺弄。
為什么應用需要溝通?
如果您只需要一個Rails應用程序來獲取瀏覽器中的實時數據,那么使用node.js服務器應用程序和Socket.IO就足夠了。
您必須記住,任何Rails應用程序實際上都是兩個應用程序,一個是在服務器上運行的Ruby中編寫的,另一個是在客戶端上運行的Javascript編寫的。 它們通常通過HTTP進行通信,有時使用AJAX進行通信,有時則不通 您的應用的哪個部分需要node.js的功能?
如果應用程序處理登錄,然后顯示網頁,然后使用實時數據不斷刷新該網頁,您只能從node.js獲得實時數據刷新的好處,無論您是否執行此操作使用AJAX輪詢或使用Websockets。 共享數據庫是應用程序進行通信的好方法,但不是實時的。
為了說清楚,如果您是Ruby with Rails的專家,如果添加節點,js服務器應用程序並僅將其用於高容量數據(如實時更新),則效率會更高。 然后,您將擁有一個混合Web應用程序,可充分利用兩種平台的優勢。
如何保持Rails並使用Faye?
最新的Railscast非常棒: http ://railscasts.com/episodes/260-messaging-with-faye
這取決於您將功能從一個功能與另一個功能分開的確切原因。 Rails支持基於REST的分離,無需您做任何額外的工作。 它是基於從頭開始的資源構建的。 這意味着您可以使用http.Client(或類似Restler)來查詢它。 你可以使用標准的Node.js路由(或類似的Express)和Ruby的HTTP客戶端(例如Typhoeus),以相反的方式完成相同的操作。 雖然這種方法會產生使用完整HTTP請求的開銷(如果在內部網絡上,則不一定會出現問題)。 如果你正在尋找一種更快速的通信方式,我會說你可以使用持久的插座來解決它,正如Raynos所說的那樣。
根據您的需要,我建議使用兩個獨立的系統會產生額外的代碼復雜性,最好將它縮減為一個框架/語言。 我全都是面向服務的設計,但Rails是一個非常重要的部分,可能會減慢你的所有響應時間,即使有Node.js使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.