python小白-day8 socketserver模块

Posted 显卡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python小白-day8 socketserver模块相关的知识,希望对你有一定的参考价值。

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()










以上是关于python小白-day8 socketserver模块的主要内容,如果未能解决你的问题,请参考以下文章

python基础学习日志day8-SocketServer

day8--socketserver回顾

day8 socket socketserver 异常 断言

day8--socketserver

python小白-day8 线程进程协程

day8--socketserver作业