实现 TCPServer类:
- 功能:
- 启动 server_start
- 处理请求 get_request (获取客户端的TCP连接)、 process_request(处理请求)、close_request(关闭TCP连接)
- 正常关闭 shutdown
- 属性:
- 自己的套接字 --> 用于接收客户端请求
- 服务端地址
- 处理器类 Handler
server/myTCPServer
#! _*_ encoding=utf-8 _*_
import socket
import threading
from ThreadPool.myThreadPool import myThreadPool
from ThreadPool.myTask import AsyncTask
from ThreadPool.myTask import Task
class TCPServer:
def __init__(self, server_addr, handler_class):
self.server_addr = server_addr
self.HandlerClass = handler_class # 处理请求的类
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.is_shutdown = False # 关闭服务器标记
self.thread_pool = myThreadPool()
# 启动服务器
def server_start(self):
self.socket.bind(self.server_addr)
self.socket.listen(10)
# 启动线程池
self.thread_pool.start()
while not self.is_shutdown:
# 1. 接收请求
request, client_addr = self.get_request()
# 2. 处理请求 --> 可能有异常
try:
# self.process_request(request, client_addr)
# 开启一个新的线程处理请求
self.process_request_multithread(request, client_addr)
except Exception as e:
print(e)
# finally:
# # 3. 关闭连接
# self.close_request(request)
self.thread_pool.join()
# 接收请求
def get_request(self):
return self.socket.accept()
# 处理请求
def process_request(self, request, client_addr):
handler = self.HandlerClass(self, request, client_addr)<