多线程表明: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