0

HTTP接続を介してNode.JSクライアントとNode.JSサーバーの間に双方向ストリームを作成したいと思います。しかしrequest、クライアントがを呼び出すまで、サーバーのイベントは呼び出されないようreq.end()です。どうすれば双方向通信を確立できますか?個別のリクエストを使用する必要がありますか?

明確化:私の期待は、それが可能であったということでした

  1. リクエストヘッダーを送信するクライアント、
  2. 応答ヘッダーを送信するサーバー、および
  3. サーバーとクライアントは、必要なときにいつでもバイトを送信します。

編集:OK、オプションの概要は次のとおりです。

  • 別のポートのTCPソケット:これは、別のポートを開いてから、以前のHTTPの使用(要求パスとヘッダー、および応答ヘッダー)を変更して、代わりにストリームを使用する場合に適しています。(私はこのオプションを拒否しました。)

  • HTTPリクエストを分離し、フラッシュが必要になるたびにリクエストを終了します。終了した接続は終了したセッションを表さなくなるため、状態の管理はアプリケーションで行われます。(短期的には、このオプションを使用します。)

  • Socket.IOWebSocketの実装+下位互換性):このオプションは非常に魅力的ですが、HTTPレイヤーの前にSocket.IOレイヤーを追加する必要があります。Socket.IOはすべてのHTTPリクエストを通過させますが、WebSocketリクエストは別の方法で処理されます。(長期的には、このオプションを使用しますが、これを許可するにはフロントエンドを変更する必要があります。)

    私が理解しているように、Node.JShttpライブラリでは、クライアントがリクエスト本文の送信をすでに完了していない(または少なくとも実質的に開始していない)場合を除いて、レスポンスヘッダーを送信できません。これは正当な理由があると思うので、この3番目のオプションは「ライブラリの前にレイヤーを追加する」というタイトルにすることもできます。http

4

1 に答える 1

2

双方向通信システムを本当に探しているのであれば、HTTPは実際には正しいプロトコルではありません。全体的な考え方は、ステートレスであり、一度に1つの要求を処理するということです。このルールには例外がありますが、それらはHTTPが行うことになっていることを実際に拡張しており、ハッキングと見なされる可能性があります。

Socket.IOのようなものを使用する必要があるようです

于 2012-08-23T22:21:23.280 に答える