使用ThreadingMixIn实现多线程套接字服务器--《Python网络编程攻略》
来源:互联网 发布:淘宝为什么比京东便宜 编辑:程序博客网 时间:2024/06/17 15:04
不同于多进程套接字服务器,基于ThreadingMixIn的多线程套接字服务器具有诸多优势:线程间共享应用状态;避免进程间复杂的通信操作,等等。
实现方法
- 创建ThreadedTCPServer类,它将继承TCPServer和ThreadingMixIn类。客户端连接这个多线程服务器时,就会创建一个新线程进行处理。
- 请求处理类ForkingServerRequestHandler会在一个新线程中将消息回显给客户端,在这个类中可以获取新线程的信息。
- 简单起见,客户端代码放在一个函数而不是一个类中。客户端代码创建客户端套接字,然后向服务器发送消息。
代码 2_2_threading_mixin_socket_server.py
'''Created on 2017-2-28@author: lenovo'''import osimport socketimport threadingimport SocketServerSERVER_HOST = 'localhost'SERVER_PORT = 0 # Tells the kernel to pick up a port dynamicallyBUF_SIZE = 1024def client(ip,port,message): """A Client to test threading mixin server""" # Connect to the server sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((ip,port)) try: sock.sendall(message) response = sock.recv(BUF_SIZE) print "Client received: %s" %response finally: sock.close()class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler): def handle(self): # Send the echo back to the client data = self.request.recv(BUF_SIZE) current_thread = threading.current_thread() response = "%s: %s" %(current_thread.name,data) self.request.sendall(response)class ThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer,): """Nothing to add here, inherited everything necessary form parents.""" """Mix-in class to handle each request in a new thread.""" passif __name__ == '__main__': #Launch the server server = ThreadedTCPServer((SERVER_HOST,SERVER_PORT),ThreadedTCPRequestHandler) ip,port = server.server_address #Retrive the port number server_thread = threading.Thread(target=server.serve_forever) server_thread.setDaemon(True) server_thread.start() print 'Server loop running on thread: %s' %server_thread.name #Launch the client client(ip,port,"Hello from client1") client(ip,port,"Hello from client2") client(ip,port,"Hello from client2") #clean them up server.shutdown()
运行情况
Server loop running on thread: Thread-1Client received: Thread-2: Hello from client1Client received: Thread-3: Hello from client2Client received: Thread-4: Hello from client2
0 0
- 使用ThreadingMixIn实现多线程套接字服务器--《Python网络编程攻略》
- Python之BSD socket套接字编写回显客户端/服务器应用----《Python 网络编程攻略》
- 使用多路复用套接字I/O提升性能之——ForkingMixIn 《Python网络编程攻略》
- 使用select.select编写聊天室服务器 《Python网络编程攻略》
- Python 网络套接字编程
- 2015-05-06python-web攻略(1)套接字-IPv4-简单的客户端服务器编程
- python网络编程中套接字的使用
- python网络套接字/多线程锁
- Python 网络编程(套接字编程)
- 使用套接字Socked实现网络通讯(网络编程)
- python 网络编程 TCP套接字实例
- 【python网络编程】TCP套接字
- python网络编程之<套接字1>
- python 网络编程学习 套接字socket
- 用Java的套接字编程实现一个多线程的回显(echo)服务器。
- 用Java的套接字编程实现一个多线程的回显(echo)服务器。
- 用Java的套接字编程实现一个多线程的回显(echo)服务器
- 使用windows套接字进行网络编程
- Go语言学习笔记 -- 内建函数
- swit 闭包的基本使用
- 103. Binary Tree Zigzag Level Order Traversal
- (三)树
- 清华EMBA课程系列思考之十七(2) -- 公司治理
- 使用ThreadingMixIn实现多线程套接字服务器--《Python网络编程攻略》
- 深入理解Java虚拟机JVM高级特性与最佳实践阅读总结——第三章垃圾收集器与内存分配策略
- apue练习题
- HTTP 学习笔记
- 492. Construct the Rectangle
- Bootstrap 按钮组与下拉按钮(Button Groups & Button Dropdowns)
- js处理时间差
- 关于TensorFlow中的多图(Multiple Graphs)
- 深入理解 AngularJS 的 Scope