• python2.7_2.2_在套接字服务器上使用ForkingMixIn


    Linux系统下才能用本程序。因为有Frok新的进程。。。。

    代码如下:

    # -*- coding: utf-8 -*-
    
    import os
    import socket
    import threading
    import SocketServer
    
    SERVER_HOST = 'localhost'
    SERVER_PORT = 0
    BUF_SIZE = 1024
    ECHO_MSG = 'Hello echo server!'
    
    
    class ForkingClient():
        """一个客户端用来测试forking server"""
    
        def __init__(self, ip, port):
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.sock.connect((ip, port))
    
        def run(self):
            """客户端playing with服务器"""
            # 发送数据到服务端
            current_process_id = os.getpid()
            print 'PID %s Sending echo message to the server:"%s"' % (current_process_id, ECHO_MSG)
            sent_data_length = self.sock.send(ECHO_MSG)
            print 'Sent:%d characters, so far ...' % sent_data_length
    
            # 显示服务端回应
            response = self.sock.recv(BUF_SIZE)
            print 'PID %s received:%s' % (current_process_id, response[5:])
    
        def shutdown(self):
            """清空客户端套接字"""
            self.sock.close()
    
    
    class ForkingServerRequestHandler(SocketServer.BaseRequestHandler):
        def handle(self):
            # 发送回显回客户端
            data = self.request.recv(BUF_SIZE)
            current_process_id = os.getegid()
            response = '%s:%s' % (current_process_id, data)
            print 'Server sending response [current_process_id:data] = [%s]' %response
            self.request.send(response)
            return
    
    
    class ForkingServer(SocketServer.ForkingMixIn,
                        SocketServer.TCPServer,
                        ):
        pass
    
    
    def main():
        server = ForkingServer((SERVER_HOST, SERVER_PORT), ForkingServerRequestHandler)
        ip, port = server.server_address
        server_thread = threading.Thread(target=server.serve_forever)
        server_thread.setDaemon(True)
        server_thread.start()
        print 'Server loop running PID:%s' % os.getpid()
    
        client1 = ForkingClient(ip, port)
        client1.run()
    
        client2 = ForkingClient(ip, port)
        client2.run()
    
        server.shutdown()
    
        client1.shutdown()
        client2.shutdown()
        server.socket.close()
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    [国家集训队]数颜色 / 维护队列(带修莫队)
    最大流(三)—— Dinic算法
    最大流(二)—— SAP算法
    最大流(一)—— Edmond-Karp算法
    Arhus University 2000
    USACO 2005 December Gold
    USACO 2004 February
    欧拉函数模版
    最小树形图模板
    线段树模板
  • 原文地址:https://www.cnblogs.com/jsben/p/5167759.html
Copyright © 2020-2023  润新知