多線程表明:IIS服務器python
多進程表明: Apache服務器服務器
子線程共享主線程的變量,因此主線程中不能關閉new_socket.close(),不然子線程也會斷開鏈接多線程
上代碼:併發
from socket import * def main(): # 建立對象 tcp_server = socket(AF_INET, SOCK_STREAM) # 綁定地址 tcp_server.bind(('', 8888)) # 將主動模式設置爲被動模式 tcp_server.listen(5) # 設置爲非阻塞模式 tcp_server.setblocking(False) input_server = [tcp_server] while True: for tcp_socket in input_server: # 當爲初始對象時,建立新的鏈接對象 if tcp_socket == tcp_server: try: # 建立新的鏈接對象 new_socket, client_info = tcp_socket.accept() # 設置爲非阻塞模式 new_socket.setblocking(False) # 將新的對象添加至列表 input_server.append(new_socket) except: pass else: print(f'來自:{client_info[0]} 鏈接成功') else: try: # 接收數據 raw_data = tcp_socket.recv(1024) if raw_data: print(f'接收到數據:{raw_data.decode("gb2312")}') else: print('客戶端已斷開!') # 關閉鏈接 tcp_socket.close() # 移除列表中 input_server.remove(tcp_socket) except: pass if __name__ == '__main__': main()
效果: 多個客戶端訪問服務端時,互不影響,可通知進行通信。app
阻塞型: 同一時刻只能有一個進行通信,其餘的的鏈接將以排隊方式進行阻塞。socket