単一プロセスの単一スレッドTCPサーバーの並行性を実現するための非ブロッキングの考え

ソケットをデフォルトの非ブロッキング状態に設定し、トラップ例外を使用して、非ブロッキングによるソケットの異常を処理し、プログラムの通常の動作を実現します。効果は次のとおりです。

 

 

1  インポートソケット
 2  
3  
4  def main():
 5      tcp_server_socket = socket.socket(socket.AF_INET、socket.SOCK_STREAM)
 6      tcp_server_socket.bind((''、7788 ))
 7      tcp_server_socket.listen(128 8      tcp_server_socket.setblocking(偽)   #のセット非目詰まりリスニングソケット
9  
10      client_socket_list =リスト()   は、クライアントソケットを格納し、リストを提供する
11。     一方で真:
 12は、         試してみる13です              CLIENT_ADDR =、のソフトウェアので、tcp_server_socket.accept()
 14          を除い15              パス
16              #の印刷( "なし新しいクライアント接続")
17。         18は、             印刷" クライアントへ" 19。              new_socket.setblocking(偽)   #の設定クライアントソケット非詰まりワード
20である             (ソフトウェアのため)client_socket_list.append
 21は 
22である         。#リストがループに対して実行されていない空である
23である         ため client_socket client_socket_list:
 24              試み25                  recv_data = client_socket.recv(1024 26は             除く27の                 パス
28                  ( "クライアントからデータを受け取っていない")を印刷
29              30                  のIF recv_data:
 31は                     印刷(recv_data.decode('UTF-8 ' ))
 32 #があったrecvがなく、何もデータが受信されません、実証されたクライアントは、接続クローズし33である34である                    client_socket_list.remove(client_socket)
 35                     client_socket.close()
 36 37 38であるIF __name__ == ' __main__ ' 39      メイン()                 
                    
 
  

おすすめ

転載: www.cnblogs.com/zuzhuangmengxiang/p/12688298.html