SocketServer模块
SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求。
ThreadingTCPServer
ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 “线程”,该线程用来和客户端进行交互。
1、ThreadingTCPServer基础
使用ThreadingTCPServer:
创建一个继承自 SocketServer.BaseRequestHandler 的类
类中必须定义一个名称为 handle 的方法
启动ThreadingTCPServer
多并发实例:
服务端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/usr/bin/env python
import
socketserver
class
MyTCPHandler(socketserver.BaseRequestHandler):
def
handle(
self
):
#handle函数必须重新定义
while
True
:
print
(
'new conn:'
,
self
.client_address)
data
=
self
.request.recv(
1024
)
if
not
data:
break
print
(
'client says:'
,data.decode())
self
.request.send(data)
if
__name__
=
=
'__main__'
:
host,port
=
'localhost'
,
50007
server
=
socketserver.ThreadingTCPServer((host,port),MyTCPHandler)
server.serve_forever()
|
客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python
import
socket
ip_port
=
(
'127.0.0.1'
,
50007
)
sk
=
socket.socket()
sk.connect(ip_port)
while
True
:
user_input
=
input
(
'>>:'
)
sk.send(bytes(user_input,
'utf8'
))
server_reply
=
sk.recv(
1024
)
print
(
'server reply:'
,
str
(server_reply,
'utf8'
))
sk.close()
|