2017-03-08 8 views
0

分析目的で複数のエンドポイントから同時にデータをストリームできるサーバーを構築したいと考えています。ユーザーのストリームデータ

シナリオ:当社のプラットフォーム上で登録 ユーザーが自分のIoTデバイスの資格情報を提供します。例えばhttps://stream.example.com/user1 & https://stream.example.com/user2

私どもの責任は、レポートを生成するために、デバイスログとステータスを監視することです。

質問:各ストリームはHTTP接続を開いたままにするので、node.jsまたはrubyアプリケーションでserval HTTPストリームを開くにはどうすればよいですか?

+0

あなたのサーバがその単一のストリームにあなたのデバイスおよびマルチプレクサからデータを取得したいですか? –

+0

可能ですか?私はデータストリーミングに精通していません。それを行う方法を提案してください。ありがとう –

+0

はい。私がスクラムジェットを書いたときに私が思いついた事例の1つは...私は答えを書くでしょう。 :) –

答えて

0

私はほとんどの時間は、あなたのアプリケーションだけで(ファイルへのネットワークデータをストリーミング)IOを処理しているため、CPUがボトルネックではないかもしれないと感じています。しかし、帯域幅を考慮する必要があり、帯域幅がボトルネックになったときにスケールアウトする必要があります。このような場合、従来のリバースプロキシは役に立ちません。ラウンドロビンDNSなどのいくつかのDNSトリックを実行して、クライアントをサーバーに均等にディスパッチし、サーバーに直接接続させる必要があります。

私はそれらのログを保存するためにデータベースを使用しないようお勧めします。プレーンテキストファイルで十分です。これらのファイルを定期的に解析し、必要に応じてデータベースを更新するcrontabジョブを作成することができます。

私は、Rubyを使用しないことをお勧めします。 Node.jsは非同期IOのためこのような状況に適しています。これにより、1つのスレッドで数千もの接続を処理できます。オープン接続を維持することは、非同期フレームワークにうまく機能し、Rubyは非常にフィット思えません(が、その後、私はルビーにあまりないよ) -

+0

申し訳ありません。私の以前の質問は少し不明です。私は私の質問を更新しました。あなたはそれについて何か考えているかどうか確認してください。 –

0

私ものNode.jsのルートたいあなたのケースを見てみます。

Scramjetを使用すると、これはかなり簡単ですが、両方の当事者が開いている接続を維持する必要があることに注意してください。ノードアプリケーション自体ではありません。あなたのケースでは、あなたのノードのアプリケーションが、与えられた資格情報を持ついくつかのデバイスへの接続をアクティブに開くことが理解されています。これらのデバイスは、TwitterのストリーミングAPIのようなhttpで終わらないストリームで応答します。少しのようになります。

new scramjet.MultiStream(devicesList.map(
    (device) => request.post(device, credentials) 
      .pipe(new StringStream()) 
      .split("\r?\n") // or however you'd read your messages 
      .parse(JSON.parse) // or however you'd parse your data 
      .assign({deviceId: device.id}) // you'll probably need this 
)) 
.mux(/* optionally an ordering function */) 
// above there's a single stream with all the logs from all your devices. 

これは他の方法でラウンドで、デバイスはscramjet-http-uristreamscramjet-http-postを見てみましょう、その後、サーバーを呼び出している場合 - それだけであるすべてのURIのか、投稿をストリームシンプルなサーバですサーバーに投稿されます。

こちらがお役に立てば幸いです。 :)

関連する問題