socketserver

您所在的位置:网站首页 socket连接池框架 socketserver

socketserver

2024-06-26 15:49:08| 来源: 网络整理| 查看: 265

服务器创建的说明¶

在继承图中有五个类,其中四个代表四种类型的同步服务器:

+------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+

请注意 UnixDatagramServer 是派生自 UDPServer,而不是派生自 UnixStreamServer --- IP 和 Unix 流服务器的唯一区别地址族。

class socketserver.ForkingMixIn¶ class socketserver.ThreadingMixIn¶

每种服务器类型的分叉和线程版本都可以使用这些混合类来创建。 例如,ThreadingUDPServer 的创建方式如下:

class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass

混合类先出现,因为它重载了 UDPServer 中定义的一个方法。 设置各种属性也会改变下层服务器机制的行为。

ForkingMixIn 和下文提及的分叉类仅在支持 fork() 的 POSIX 系统平台上可用。

socketserver.ForkingMixIn.server_close() 会等待直到所有子进程完成,除非 socketserver.ForkingMixIn.block_on_close 属性为假值。

socketserver.ThreadingMixIn.server_close() 会等待直到所有非守护类线程完成,除非 socketserver.ThreadingMixIn.block_on_close 属性为假值。 请将 ThreadingMixIn.daemon_threads 设为 True 来使用守护类线程以便不等待线完成。

在 3.7 版更改: socketserver.ForkingMixIn.server_close() 和 socketserver.ThreadingMixIn.server_close() 现在会等待直到所有子进程和非守护类线程完成。 请新增一个 socketserver.ForkingMixIn.block_on_close 类属性来选择 3.7 版之前的行为。

class socketserver.ForkingTCPServer¶ class socketserver.ForkingUDPServer¶ class socketserver.ThreadingTCPServer¶ class socketserver.ThreadingUDPServer¶

这些类都是使用混合类来预定义的。

要实现一个服务,你必须从 BaseRequestHandler 派生一个类并重定义其 handle() 方法。 然后你可以通过组合某种服务器类型与你的请求处理句柄类来运行各种版本的服务。 请求处理句柄类对于数据报和流服务必须是不相同的。 这可以通过使用处理句柄子类 StreamRequestHandler 或 DatagramRequestHandler 来隐藏。

当然,你仍然需要动点脑筋! 举例来说,如果服务包含可能被不同请求所修改的内存状态则使用分叉服务器是没有意义的,因为在子进程中的修改将永远不会触及保存在父进程中的初始状态并传递到各个子进程。 在这种情况下,你可以使用线程服务器,但你可能必须使用锁来保护共享数据的一致性。

另一方面,如果你是在编写一个所有数据保存在外部(例如文件系统)的 HTTP 服务器,同步类实际上将在正在处理某个请求的时候“失聪” -- 如果某个客户端在接收它所请求的所有数据时很缓慢这可能会是非常长的时间。 这时线程或分叉服务器会更为适用。

在某些情况下,合适的做法是同步地处理请求的一部分,但根据请求数据在分叉的子进程中完成处理。 这可以通过使用一个同步服务器并在请求处理句柄类 handle() 中进行显式分叉来实现。

还有一种可以在既不支持线程也不支持 fork() 的环境(或者对于本服务来说这两者开销过大或是不适用)中处理多个同时请求的方式是维护一个显式的部分完成的请求表并使用 selectors 来决定接下来要处理哪个请求(或者是否要处理一个新传入的请求)。 这对于流服务来说特别重要,因为每个客户端可能会连接很长的时间(如果不能使用线程或子进程)。 请参阅 asyncore 来了解另一种管理方式。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭