私は定期的に(1秒ごとに)plcと通信する必要があります。メッセージを送信してメッセージを受け取ります。この通信にはSocket
クラスを使用します。接続(socket=new Socket(ipaddress, port)
)を開き、messagethen socket.close()
などを送信するか、またはいつもソケットopetを保持するために1秒ごとに必要ですか?ソケットを開いて1秒間閉じるか開いたままにする
答えて
私はあなたがここにTCPソケットの話をしていると仮定します... TCP接続の設定に関与明白な非効率性から離れて
は毎秒あなたも(TIME_WAIT
にソケットを蓄積してしまう可能性が高いですうまくいけばあなたのクライアントに)。
私はおよそTIME_WAIT
を書いてきたし、それは私のブログに、ここでのサーバの拡張性と安定性に関して発生した問題:http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html
は、(1秒に1回は240につながるあなたはソケットを開閉している率を考えます(60 * 4)ソケットは通常の(4分)2MSL TIME_WAIT
の期間にTIME_WAIT
に座っています)これは、TIME_WAIT
ソケットがクライアント上で終わっていると仮定して、あまり問題はないはずです。毎秒たくさんのサーバーに接続していませんが...毎秒サーバーに接続するクライアントがたくさんあり、サーバーがソケットを蓄積していないことを確認していない場合は、TIME_WAIT
状態では、サーバーのスケーラビリティが制限されることがあります。
代わりに、ソケット接続を開いたままにして、障害が発生した場合にのみ開いてください。これは最初にプログラムするのがやや複雑ですが、この方法で接続をプールするほうがかなり効率的です(データを送信するだけで、TCPハンドシェイクを行う必要はありません接続を確立する)、クライアント上ではるかに多くのリソースを効率的に使用できます。あなたは240ソケットを永久に保持していませんTIME_WAIT
クライアントは永続的に接続され、クライアントは常にサーバーに接続できます。しかし、このアプローチのパフォーマンスは、サーバーの実装方法によって異なります。スレッドモデル(クライアント接続ごとに1つのスレッド)を使用する場合、多くのクライアント接続を処理する際にリソースが不足する可能性があります。 「計算」が長生きしていない限り、サーバーが要求を処理するためのイベントベースのアプローチを使用する場合は、永続的なクライアントアプローチを使用することをお勧めします。
いつものように、あなたのユースケースに基づいたベンチマークであり、あなたは良いことがあります。
ソケットを常に接続し続けると、ネットワークトラフィックとクライアントの計算時間が短縮されます。ただし、サーバがブロッキングI/Oを使用している場合、多くのクライアントが接続されたままになると、接続スレッドが不足することがあります。また、タイムアウト、ネットワークの問題、およびサーバーのダウンタイムのために、切断された接続に対処する必要があります。
- 1. JQuery:開いている/閉じるメニュー、開きますが閉じない
- 2. 開いているダイアログボックスをすべて閉じますか? (JQuery)
- 3. os.fdopenで開いたファイルを閉じると、os-level fdが閉じますか?
- 4. C#で開いているファイルハンドルをすべて閉じます
- 5. 3秒後にjQueryダイアログが開いて自動的に閉じます
- 6. PHP:phpで開かれたsshでソケットを閉じる
- 7. Javascript:開いたウィンドウを閉じて
- 8. アンインストール前にWiXアプリケーションを閉じる - 開いているアプリケーションメッセージを閉じる
- 9. ServerSocket.close()は開いているすべてのソケットを閉じますか?私のアプリで
- 10. ファイルを開いてVimを開いて閉じると、ファイルが開かれます。
- 11. COM1を開いたままにして、COM1を閉じるにはどうしたらいいですか?
- 12. document.onclick閉じるが、メニューをクリックすると開いたままにする
- 13. フォームを閉じるとき閉じる開いているすべてのメッセージボックスを閉じる方法を
- 14. mailto uri - javascript window.openして閉じてもIE8で開いたままになる
- 15. 予期しないソケットが閉じられることがある(または開かない)
- 16. jQuery UIアコーディオン:トップメニューからパネルを開き、開いているパネルを閉じる
- 17. オープニング設定チャーム中にカメラが開いていると、ウィンドウが開いているウィンドウが閉じます。
- 18. 真夜中を過ぎて何時間も開いた、閉じた通知を表示していますか?
- 19. folderbrowserが閉じるときモーダルウィンドウを開いたままにする
- 20. 開いている要素をすべて閉じる
- 21. 毎回Pythonファイルを開いたり閉じたりしています。処理が完了するまで開いたままにしておきます。
- 22. Android:ダイアログが開いているときにアクティビティを閉じる
- 23. git pullの後にVisual Studio 2010が開いているファイルを閉じます
- 24. QGraphicsPolygonItem開いた(閉じていない)ポリゴンを描画します
- 25. VBSを使用して開いているOneNoteアプリケーションを閉じます。
- 26. ファイルを開いたままにしておくか、頻繁に開閉する必要がありますか?
- 27. 「アプリケーションはここで開いたカーソルまたはデータベースオブジェクトを閉じなかった」が表示されますが、コマンドを閉じて閉じます。
- 28. Androidソケット例外 "ソケットが閉じています"
- 29. 開いたらすぐにウィンドウを閉じる
- 30. 日食の開いているウィンドウを閉じる方法