利用 Python 自带的 TCPServer 编写 TCP 接收服务器

利用 Python 自带的 TCPServer 编写 TCP 接收服务器


Python3.6+ 自带了 TCPServer 以便于更快编写 TCP 服务器,同时 Python 也提供了多线程的 Mixin 以提供多线程支持。

由于每个 TCPServer 只能服务于一个 TCP 连接,而 Python 的多线程 Mixin 并不限制最大连接数,所以可能会导致线程过度增长。

本文介绍一种简单的自制线程池方法的 Python TCP 服务器。


代码

settings.py

BUF_SIZE = 1024
SERVER_PORT = 8973
THREAD_WORKERS_NUM = 10

server.py

from socketserver import BaseRequestHandler, TCPServer
from threading import Thread
import settings
import logging

# 自定义的日志
logging.basicConfig(
    level=logging.INFO,
    format='[%(levelname)s] %(asctime)s %(filename)s: %(message)s',
    datefmt='%Y-%m-%d %A %H:%M:%S',
    filename='socket.log',
    filemode='a',
)


class ReceiveHandler(BaseRequestHandler):
    def setup(self):
        logging.info("Connect from: " + str(self.client_address))

    def handle(self):
        try:
            while True:
                msg = self.request.recv(settings.BUF_SIZE)
                if msg:
                	# 接收处理
                    pass
                else:
                    break
        except Exception as e:
            logging.warning('Exception is: ' + str(e))

    def finish(self):
        logging.info("Disconnect from: " + str(self.client_address))


if __name__ == '__main__':
    try:
        logging.info("Start Server !")
        socket_serve = TCPServer(('', settings.SERVER_PORT), ReceiveHandler)
        for i in range(settings.THREAD_WORKERS_NUM):
            t = Thread(target=socket_serve.serve_forever)
            t.daemon = True
            t.start()
        socket_serve.serve_forever()
    except KeyboardInterrupt:
        socket_serve.shutdown()
        logging.info("Stop Server !")

参考链接

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值