簡體   English   中英

在Rails應用程序和Node.js應用程序之間進行通信

[英]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

一種方法是擁有一個共同的后端數據庫或某種內存存儲器,它們將充當兩種技術之間的中間層。 例如,流行的是使用像Redis這樣的NoSQL DB,它快速,基於內存並支持高級數據結構,這對於這種情況很方便。 此外,node.js和RoR都有一個很好的客戶端庫,可以與Redis進行通信。

我想說的主要問題是兩個獨立系統之間的初始認證需要同步。 有與此主題相關的類似問題/答案可能對閱讀有用,例如 兩個顯示了解決身份驗證問題的可能方法。

這取決於您將功能從一個功能與另一個功能分開的確切原因。 Rails支持基於REST的分離,無需您做任何額外的工作。 它是基於從頭開始的資源構建的。 這意味着您可以使用http.Client(或類似Restler)來查詢它。 你可以使用標准的Node.js路由(或類似的Express)和Ruby的HTTP客戶端(例如Typhoeus),以相反的方式完成相同的操作。 雖然這種方法會產生使用完整HTTP請求的開銷(如果在內部網絡上,則不一定會出現問題)。 如果你正在尋找一種更快速的通信方式,我會說你可以使用持久的插座來解決它,正如Raynos所說的那樣。

根據您的需要,我建議使用兩個獨立的系統會產生額外的代碼復雜性,最好將它縮減為一個框架/語言。 我全都是面向服務的設計,但Rails是一個非常重要的部分,可能會減慢你的所有響應時間,即使有Node.js使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM