私はnode.js/socket.ioを使ってチャットサーバーを検討していました。私はそれをtcpサーバーまたはhttpサーバーにする必要がありますか?私はTCPサーバがより効率的だろうと思うだろうが、添付ファイルのようなものに他のものを送ることができますか? tcpがより効率的であれば、どれくらいですか?また、どれだけの同時接続がnode.jsサーバーで処理できるのでしょうか?それはTCPまたはHTTPを行うための多くの仕事ですか?ディスカッション:node.js経由のチャットサーバー:HTTPまたはTCP?
答えて
ここでは全く異なる2つのアプローチについて言及しています.TCPはトランスポートレイヤプロトコルで、HTTPはアプリケーションレイヤプロトコルです。 HTTP(通常)はTCP上で動作します。したがって、どちらのオプションを選択してもTCP上で動作します。
あなたが異なるOSI layersについて話しているので、効率の質問は、議論の余地がポイントのようなものです。生のTCPソケットを使用した場合、HTTPには、チャットの規模に応じて、余分なデータ(ヘッダー)が含まれている可能性が高いため、プログラム)。あなた自身のアプリケーション層プロトコルがあります。
あなたはTCP上で、あなたが好きなものを送ることができます - すべてのHTTPは、添付ファイルを送信することができた後、それはTCP上で動作します。 FTPはTCP経由でも動作し、純粋に「添付ファイル」を転送するために設計されています。これを行うには、リモートパーティーに次のデータがファイルであることを伝えてからファイルデータを送信し、転送が完了したことをリモートパーティーに伝えることができるように、プロトコルを記述する必要があります。これの実装は多種多様です(HTTPのアプローチはFTPのアプローチとはまったく異なります)、あなたのオプションはかなり無限です。
私はNode.jsの接続制限について確かなことはわかりませんが、私はそれは、オペレーティング・システムによって制限されている信頼のかなりの量を持って言うことができます。 Thisは、その質問に対する答えを把握するのに役立ちます。
TCPまたはHTTPでそれを行うにはより多くの仕事であるかどうか議論の余地がある - 両方でそれをやるべき仕事がたくさんあります。おそらく、TCPオプションがあなたの最良の賭けになるようにもっと傾けたいでしょう。 TCPはアプリケーションだけでなくプロトコルを設計する必要がありますが、HTTPはチャットサーバーのような2ウェイアプリケーションには特に適していません。 HTTP経由でAJAXを使用するチャットの実装はたくさんありますが、私は痛い経験から、彼らが後端で完全な痛みであることを伝えることができます。
ブラウザであることをエンドポイント(すなわち、クライアント)を意図している場合、私はあなただけのHTTPを見てしなければならないと言うでしょう。エンドポイント用のデスクトップアプリケーションを作成する場合は、直接TCPリンクを使用してください。これの主な理由は、HTTPがリクエスト/レスポンス方式で動作し、クライアントがサーバに要求を送信し、サーバが応答することです。 TCPを介して、双方向通信に使用できる単一のTCPストリームを開くことができます。これは、サーバーがクライアントに即座にイベントをプッシュできることを意味します.HTTPでは、クライアントがリクエストを送信するのを待たなければならないので、イベントで応答することができます。クライアントとしてブラウザを使うつもりならば、ファイル転送の全体をはるかにトリッキーにするでしょう(少なくとも送信する)。
はロングポーリングとサーバープッシュ(read this)を使用して、HTTP経由でこれを実装する方法がありますが、それは本当の痛みを実装することができます。
これをLAN上(あるいはインターネット上でさえも)に実装しようとするならば、UDP over TCPを検討する価値があります - チャットアプリケーションでは、メッセージが正しい順序で到着することは絶対に重要ではありません。たとえそれがあったとしても、ユーザーはおそらくネットワーク待ち時間の変動(おそらく< 100ms)よりも速く入力することはできません。その後、ファイル転送のために、FTPのようなデータ交換のための別個のTCPソケットをネゴシエートするか、TFTPのような何らかの種類のUDP ACKシステムを実装することができます。
私はこのテーマについてもっと多くのことを感じていますが、今は言葉にすることができません - 私はいつかこの答えを広げるかもしれません。
チャットサーバーは、ノード内のHello Worldプログラムです。 httpを使用してください。
どのように多くの同時接続が処理できるのかということは、システムによって異なります。シンプルなチャットサーバーをセットアップし、それをベンチマークしてみてください。
また、http://search.npmjs.org/をチェックし、いくつかのポインタについてchat
を検索してください。
- 1. node.jsのTCP/HTTPプロキシ
- 2. JavaチャットサーバーNETCAT経由で接続
- 3. ビデオストリーミング(TCP経由)
- 4. Node.js経由でHTTPリクエストをルーティングする
- 5. TCP/IP経由のシリアルデバイス
- 6. wlan経由のTCPソケット
- 7. Node.js経由のエクスプレス -/
- 8. PythonストリームデータをTCP経由で
- 9. HTTP経由でTCPプロトコルを使用する利点
- 10. HTTP経由のバイナリプロトコル
- 11. HTTP経由のオンザフライビデオストリーミング?
- 12. HTTP経由のストリーミングオーディオ
- 13. NetcatまたはRailsでTCP/IP経由でデータを送信
- 14. Android - Node.js経由のマルチパートリクエスト
- 15. ウェブアクセス経由でTFSにディスカッション・コメントを追加
- 16. TCP/IPまたはHTTP経由のC#.netを使用してWindows Mobileに通信しますか?
- 17. node.jsとのファイル同期:unision == tcp == node ----- [http] ----- node == tcp == unison
- 18. JavaScript経由のTCP接続へのアクセス
- 19. Metatrader 4の制御(tcp/ip経由)
- 20. Android - TCP/IP経由のデータ転送
- 21. iOS/Android - Bluetooth経由のTCP/IP
- 22. TCP経由でデータを送信するための形式は?
- 23. テレグラムnode.js経由でbotPhoto
- 24. プロキシ経由のhttp-post
- 25. Regex-match HTTP経由のタグ
- 26. ノードHTTP経由のJSアップロードファイルストリーム
- 27. HTTP経由のRTMPストリーミング
- 28. POST経由のHTTPパッチ?
- 29. HTTP経由のRMIまたはCorba Webトラフィックのネットワーク検査?
- 30. AngularJS - $ http経由のHttp基本認証
node.js/socket.ioクライアント側でtcpを実行する方法はありますか?私はこの質問もここに記載しています:http://stackoverflow.com/questions/7340475/client-side-tcp-with-node-js-socket-io – Derek
btw。たくさん説明してくれてありがとう。その助けをたくさん。しかし、udpとtcpよりも利点/短所についてもっと詳しく説明できますか?本当にありがとう! – Derek
udpパケットの損失はチャットアプリに影響しますか? – Derek