您的位置:首页 > 编程语言 > Python开发

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

2016-01-29 10:29 609 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: