長接続と短接続の同期と非同期

2497 ワード

長接続と短接続の同期と非同期
これは何度も見たことがありますが、いつも混同していて、コードの実現に工夫がなくて、いつも概念的なものを見ています.
長い接続と短い接続
   :client  server      ,        ,            。
               。       P2P  。
   :Client  server                   ,           
             。C/S  。

実際には、長接続は、通常の短接続に対して、すなわち、クライアントとサービス側との接続状態を長時間維持することである.
長い接続と短い接続の操作手順
通常の短い接続操作ステップは、接続→データ転送→接続を閉じる;
長い接続は通常、接続→データ転送→接続(心拍)→データ転送→接続(心拍)→接続(心拍)→接続を閉じる.これは,長接続がデータ通信がない場合には,接続状態を維持するためにパケット(ハートビート)をタイミングよく送信し,短接続がデータ伝送がない場合には直接閉じることが要求される.
    ——    ——    ...    ——    ——    
    ——    ...(    )...    ——    

長い接続、短い接続はいつ使いますか?
長接続は操作が頻繁で、点対点の通信に用いられることが多く、接続数が多すぎない場合が多い.TCP接続ごとに3段階の握手が必要で時間がかかり、各操作が先に接続されてから操作されると処理速度が大幅に低下するため、操作が完了するごとに開き続け、次回の処理時に直接パケットを送信すればOKとなり、TCP接続を確立する必要はありません.たとえば、データベースの接続は長い接続で、短い接続で頻繁に通信するとsocketエラーが発生し、頻繁なsocket作成もリソースの無駄です.
 
WEBサイトのhttpサービスのように短いリンクを使うのが一般的です.長い接続はサービス側にとって一定の資源を消費するためです.WEBサイトのように頻繁に何千人ものクライアントの接続用の短い接続はもっと資源を節約します.長い接続を使うと、同じ時間に何千人ものユーザーがいます.もしユーザー一人一人が接続を占有すれば、それは想像にかたくないでしょう.したがって,同時発生量は大きいが,ユーザごとに頻繁に操作する必要がなく,短い接続が必要である.
 
要するに、長接続と短接続の選択は状況によって異なる.
************************************
Socket長接続の実装、心拍数データメッセージを別のスレッド間隔で送信する必要がある(例えば、TESTサービス側がTEST_OKを返すようにコンテンツをカスタマイズすることができる)、TESTを送信し、読み出しデータのタイムアウト時間内にサービス側から戻ってきたTEST_OKを読み取った場合は、現在のリンクが健康であることを示す.TESTを送信してエラーを報告したり、送信してタイムアウト時間がまだTEST_OKを受け取っていない場合は、再接続処理を行い、これまでは、ソケットに書かれたすべてのデータを制御し、書き込みソケットの外にブロックする必要があります.
? :  run(){  read //   process //   write //  
  :  run(){  while (NotEnd){  read  process  write 
  
(同期)(非同期)
たとえば、通常のB/Sモード(同期)AJAXテクノロジー(非同期)同期:要求の発行->サーバ処理の待機->処理が完了して戻ってくる間、クライアントブラウザは何もできません非同期:要求はイベントによってトリガーされます->サーバ処理(これはブラウザが他のことをすることができます)->処理済み
通信を例に同期:1つのリクエストを送信して、戻るのを待って、それから次のリクエストを送信します非同期:1つのリクエストを送信して、戻るのを待たないで、いつでも次のリクエストを送信して送信することができます:同時に複数のリクエストを送信します
一番いい例は、同期は電話で、非同期は放送です.