您可以使用Rails的用於數據處理系統(存儲信息等)
我在想這個確切的事情昨晚:
- Rails會創建一系列endpoints
- 當您的「設備」想要通信時,它將不得不向端點發起請求
- 設備將推送到Rails端點
設備
不知道該設備是什麼,我會想象它的工作方式是,它必須能夠發起一個POST
請求(想象一個Rasberry Pi發送數據)時的東西發生
如果您的設備是牙刷,你得有能力(無論是在芯片或外部),它連接到網絡&將數據發送到您的(插入框架)服務器
Rails的
的Rails可以處理像這樣(這是我們的一些現場分析系統的代碼,其以相似的方式工作):
#config/routes.rb
post "/update", to: "messages#create"
#app/controllers/messages_controller.rb
protect_from_forgery with: :null_session
before_action :authenticate
#Data
def create
#create message here
end
private
# have to give x a "token"
def authenticate
authenticate_or_request_with_http_token do |token, options|
user = User.exists?(public_key: token)
@token = token if user
end
end
這將創建端點:
domain.com/update
您必須在標題中發送您的authentication token,並且可能需要使用rack-CORS(或其他CORS策略管理器)來處理的X域交易:
#config/application.rb
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '/update*', :headers => :any, :methods => :post
end
end
數據
Rails的東西是MVC application(可根據您的後端服務器資源的比例)
當您想將設備集成到後端時,會出現棘手的部分。你提到你可以支持HTTP請求 - 招會「如何」
- 你必須要整合一些認證(可能是序列號),這將有存在於你的Rails DB
- 這將隨後通過該設備通過網絡發送到您的端點
- 一旦你有要求,Rails可以處理它在服務器上&返回響應
所以最大的問題是 - 你的設備如何與服務器通信?
交叉通信
Server -> Device
通信push technology:
- 設備將ping命令(在瀏覽器中通過JS,在別人不知道) 「現場直播」
- 服務器會發送數據到特定的「頻道」
- 如果設備訂閱了頻道,它將會l接收更新
的問題已經不再是「網絡套接字」技術,因爲它是"sub/pub"
在瀏覽器的世界裏,你基本上打開使用Javascript永久連接。這可以通過使用SSE's(榮耀long-polling)或websockets
兩者都可以通過「聽」到您的頻道上的事件進行訪問來完成:
#Pusher
channel.bind('my-event', function(data) {
alert('An event was triggered with message: ' + data.message);
});
#SSE's
var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML + =event.data + "<br>";
};
在設備方面,我會在看您希望從服務器接收數據的頻率。當然,發送數據是「按需」服務,但接收確實像你說的,隨身攜帶的開銷
如果你每天只能預期的消息,我想看看使用某種long-polling
技術每小時查找數據;如果您需要立即的消息,我想看看集成與網絡插口
服務器
在服務器上處理這種持久連接將下降到您的服務器可以有多少個併發連接如果您正在使用AWS處理
,你就可以比較簡單地規模,但每個連接將被歸類爲「併發」
什麼樣的設備/操作系統的客戶端? –
其微控制器。支持Http請求,我不建立它,但我很確定它可以處理套接字,不確定是否有用於websockets的庫。 – DArkO
爲您寫作答案 –