博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socketserver用法列子
阅读量:4685 次
发布时间:2019-06-09

本文共 1774 字,大约阅读时间需要 5 分钟。

socketserver

socketserver内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的scoket服务端。即,每个客户端请求连接到服务器时,socket服务端都会在服务器是创建一个“线程”或“进程”专门负责处理当前客户端的所有请求。

ThradingTCPServer

ThradingTCPServer实现的socket服务器内部会为每个client创建一个“线程”,该线程用来heels客户端进行交互

1,ThradingTCPServer 基础

使用ThradingTCPServer:

  • 创建一个继承 socketserver.BaseRequestHandler 的类
  • 类中必须定义一个名we诶handle 的方法
  • 启动 ThradingTCPServer

 记住一个原则:对tcp来说:self.request=conn

代码:

#!/usr/bin/env python3import socketserverclass Server(socketserver.BaseRequestHandler):    #$ 必须继承BaseRequestHandler    def handle(self):        #$ 必须有handle方法        print('New connection:',self.client_address)        while True:            data = self.request.recv(1024)            if not data:break                print('Client data:',data.decode())            self.request.send(data)    if __name__ == '__main__':    server = socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyServer)    #$ 实现多线程的socket    server.serve_forever()    #$ 当前连接断开不会出现关闭或报错,可以与其他客户端继续连接

 

client端:

import socketip_port = ('127.0.0.1',8080)sk = socket.socket()sk.connect(ip_port)while True:    raw = input('>> ').strip()    sk.send(bytes(raw,'utf8'))    msg = sk.recv(1024)    print(str(msg,'utf8'))sk.close()

 

2,ThradingTCPServer源码剖析

内部调用流程为:

  • 启动服务端程序
  • 执行 TCPServer.__init__方法,创建服务端socket对象并绑定IP和端口
  • 执行 BaseServeer.__init__方法,将自定义的继承自socketserver.BaseRequestHandler 的类 MyRequestHandle赋值给 self.RequestHandlerClass
  • 执行BaseServer.server_forever 方法,while 循环一直监听是否有客户端请求到达
  • 当客户端连接到达服务器
  • 执行ThreadingMixIn.proceess_request 方法,创建一个“线程”用来处理请求
  • 执行 ThreadingMixIn.proceess_request _thread 方法
  • 执行 BaseServer.finish_request 方法,执行 self.RequseetHandlerClass() 即:执行 自定义 MyRequestHandler 的构造方法(自动调用基类 BaseRequestHandler的构造方法,在该构造方法中又会调用MyRequestHandler的handle方法)

转载于:https://www.cnblogs.com/qunxiadexiaoxiangjiao/p/8394004.html

你可能感兴趣的文章
daomain
查看>>
C pointers和Java references 的区别
查看>>
理解MapReduce
查看>>
[Golang] GoConvey测试框架使用指南
查看>>
值类型和引用类型区别,一看就懂
查看>>
UVa 11375 Matches
查看>>
JdbcTemplate
查看>>
leetcode 2. 两数相加(Add Two Numbers)
查看>>
Crimm Imageshop 2.0 发布。
查看>>
分页存储过程
查看>>
不可忽略的知识点
查看>>
plist文件的归档,解档
查看>>
Xcode中修改默认文件头部注释
查看>>
从一个针对ASP.NET MVC框架的Controller.Action的请求处理顺序来说整个请求过程。
查看>>
[ZJOI2011]营救皮卡丘
查看>>
首页列表显示全部问答,完成问答详情页布局。
查看>>
pandas read excel文件碰到的一个小问题
查看>>
教师发表职称论文须注意事项
查看>>
libGDX简介
查看>>
《深入理解计算机系统(第三版)》第二章学习总结
查看>>