当前位置: 首页 > news >正文

华为云速建站模板创建网站的费用

华为云速建站模板,创建网站的费用,html登录注册页面代码,网站建设应用程序开发SocketServer 中非常重要的两个基类就是#xff1a;BaseServer 和 BaseRequestHandler在SocketServer 中也提供了对TCP以及UDP的高级封装#xff0c;这次我们主要通过分析关于TCP的处理逻辑来对SocketServer模块进行一个很好的理解和学习 TCPServer TCPServer 继承了BaseServ…SocketServer 中非常重要的两个基类就是BaseServer 和 BaseRequestHandler在SocketServer 中也提供了对TCP以及UDP的高级封装这次我们主要通过分析关于TCP的处理逻辑来对SocketServer模块进行一个很好的理解和学习 TCPServer TCPServer 继承了BaseServer初始化的时候进行了socket套接字的创建。 def __init__(self, server_address, RequestHandlerClass, bind_and_activateTrue):Constructor. May be extended, do not override.BaseServer.__init__(self, server_address, RequestHandlerClass)self.socket socket.socket(self.address_family,self.socket_type)if bind_and_activate:try:self.server_bind()self.server_activate()except:self.server_close()raise 在这里我们看到了我们非常熟悉的关于socket的创建的内容self.socket socket.socket(self.address_family, self.socket_type)通过socket模块创建了socket对象接着调用了server_bind和server_activate server_bind 源码内容如下 def server_bind(self):Called by constructor to bind the socket.May be overridden.if self.allow_reuse_address:self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)self.socket.bind(self.server_address)self.server_address self.socket.getsockname() 这里我们看到了非常熟悉的操作socket.bind方法以及设置了socket的相关属性 server_activate 源码内容如下 def server_activate(self):Called by constructor to activate the server.May be overridden.self.socket.listen(self.request_queue_size) 同样的这里的调用也非常简单就是执行了socket.listen get_request 在TCPServer类中我们还看到了get_request方法源码内容如下 def get_request(self):Get the request and client address from the socket.May be overridden.return self.socket.accept() 这个的调用其实我们可以在BaseServer这个基类中看到我们之前看过关于BaseServer中这个基类的源码我们可以从我们调用BaseServer基类中的serve_forever方法查看这里是调用了_handle_request_noblock方法我继续查看_handle_request_noblock这个源码 def _handle_request_noblock(self):Handle one request, without blocking.I assume that selector.select() has returned that the socket isreadable before this function was called, so there should be no risk ofblocking in get_request().try:request, client_address self.get_request()except OSError:returnif self.verify_request(request, client_address):try:self.process_request(request, client_address)except:self.handle_error(request, client_address)self.shutdown_request(request)else:self.shutdown_request(request) 可以看到这里最后是调用了process_request来处理请求继续查看源码 def process_request(self, request, client_address):Call finish_request.Overridden by ForkingMixIn and ThreadingMixIn.self.finish_request(request, client_address)self.shutdown_request(request)def finish_request(self, request, client_address):Finish one request by instantiating RequestHandlerClass.self.RequestHandlerClass(request, client_address, self) 从上面的代码我们可以到最后是在finish_request中实例化了RequestHandlerClass我们 这个时候查看一下BaseRequestHandler这个基类的源码如下: class BaseRequestHandler:Base class for request handler classes.This class is instantiated for each request to be handled. Theconstructor sets the instance variables request, client_addressand server, and then calls the handle() method. To implement aspecific service, all you need to do is to derive a class whichdefines a handle() method.The handle() method can find the request as self.request, theclient address as self.client_address, and the server (in case itneeds access to per-server information) as self.server. Since aseparate instance is created for each request, the handle() methodcan define other arbitrary instance variables.def __init__(self, request, client_address, server):self.request requestself.client_address client_addressself.server serverself.setup()try:self.handle()finally:self.finish()def setup(self):passdef handle(self):passdef finish(self):pass 在初始化函数里我们看到了调用setup()方法这setup在StreamRequestHandler会被重写 StreamRequestHandler TCPServer实现了使用tcp套接字的网络服务Handler方面则是对应的StreamRequestHandler。它继承了BaseRequestHandler。基类的setup方法和finish方法被它重写用于通过连接实现缓存文件的读写操作。 setup方法 源码内容如下 def setup(self):self.connection self.requestif self.timeout is not None:self.connection.settimeout(self.timeout)if self.disable_nagle_algorithm:self.connection.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY, True)self.rfile self.connection.makefile(rb, self.rbufsize)self.wfile self.connection.makefile(wb, self.wbufsize) 这里主要设置了对应连接的属性其中创建了两个对象非常重要:一个可读rfile和一个可写wfile的“文件”对象但是实际并不是创建了文件而是封装了读取数据和发送数据的操作抽象成了对文件的操作可以理解self.rfile 就是读取客户端数据的对象它有一些方法可以读取数据。self.wfile则是用来发送数据给客户端的对象。 整理流程(TCP) 实现TCP服务需要使用TCPServer和StreamRequestHandler共同协作  转载于:https://www.cnblogs.com/zhaof/p/8890600.html
http://www.sadfv.cn/news/200885/

相关文章:

  • 绵阳网站关键字优化手机微信打开文件是乱码
  • 手机怎么建网站付网站建设服务费记账
  • 天河区门户网站教育局东莞seoseo关键词排名优化
  • 免费做印章的网站ps企业站网站做多大的
  • 帝国cms做英文网站西安地区专业做网站公司
  • 做企业网站需要注意哪些免费网站制作申请
  • 郑州手机网站推广外包做一个代驾app需要多少钱
  • 免费建个人网站步骤wordpress ios7
  • 网站模板放哪西峰网站建设
  • 如何做网站的内容网站建设桔子科技
  • 网站推广的优点网站开发的职位要求
  • 深圳租赁住房和建设局网站成功的门户网站
  • 山西响应式网站建设推荐网站建设 php jsp .net
  • 网站建设有关数据库的代码建设一个网站系统要多久
  • 建设一个怎样的自己的网站首页在线html编辑器
  • 怎么做好网站营销北京商场核酸
  • 万网虚拟主机两个网站互联网行业 英文
  • 网站看不到预览图车间生产管理软件
  • 做交易平台的网站需要哪些技术靖宇东兴自助建站
  • 沛县网站制作win7上能否做asp网站
  • 网站优化 图片上海房产交易网站
  • 最专业的网站建设推广网站设计分辨率
  • 邯郸信息港征婚交友宁波网站优化
  • 深圳品牌网站制作报价专做耐克阿迪鞋网站
  • 零配件加工东莞网站建设技术支持企业网站模板源码免费
  • 大岭山网站建设公司wordpress常见插件
  • 怎么避免网站开发后门工作简历模板免费下载
  • 网站开发所需要的语言设计师电脑配置推荐2022
  • 自己如何制作一个软件seo公司是干嘛的
  • 软件公司网站素材wordpress go 跳转