内容简介:首先看到文件上半部分的注释,讲清楚了这个module里的类继承关系。不在上面描述的有线程和进程模型,它们是通过Mixin实现的。一个同步的服务器基本上 就是以下这样的套路:socketserver 也不例外,虽然里面用到了
首先看到文件上半部分的注释,讲清楚了这个module里的类继承关系。
+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+
不在上面描述的有线程和进程模型,它们是通过Mixin实现的。一个同步的服务器基本上 就是以下这样的套路:
import socket
sock = socket.socket()
sock.bind(('localhost', 8080))
sock.listen()
def handle(conn, client_addr):
conn.send(b"some data")
conn.close()
while True:
conn, client_addr = sock.accept()
handle(conn, client_addr)
socketserver 也不例外,虽然里面用到了 selectors.PollSelector
,这个文件里最精彩
的部分在于实现 ThreadingMixIn
和 ForkingMixIn
。我也来写一个更简单的版本:
import socket
import threading
import selectors
class BaseServer:
def __init__(self):
self.selector = selectors.PollSelector()
def fileno(self):
raise NotImplemented()
def handle_request(self):
raise NotImplemented()
def serve_forever(self):
self.selector.register(self, selectors.EVENT_READ)
while True:
if self.selector.select():
self.handle_request()
class TCPServer(BaseServer):
def __init__(self):
super().__init__()
self.socket = socket.socket()
self.socket.bind(('localhost', 8080))
self.socket.listen()
def fileno(self):
return self.socket.fileno()
def handle_request(self):
return self.__handle_request()
def _handle_request(self):
conn, addr = self.socket.accept()
conn.send(b'hello world\n')
conn.close()
class ThreadingMixIn:
def handle_request(self):
t = threading.Thread(
target=self._handle_request,
)
t.start()
class ThreadingTCPServer(ThreadingMixIn, TCPServer):
pass
if __name__ == "__main__":
# TCPServer().serve_forever()
ThreadingTCPServer().serve_forever()
以上所述就是小编给大家介绍的《socketserver 源码阅读》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【源码阅读】AndPermission源码阅读
- 【源码阅读】Gson源码阅读
- 如何阅读Java源码 ,阅读java的真实体会
- 我的源码阅读之路:redux源码剖析
- JDK源码阅读(六):HashMap源码分析
- 如何阅读源码?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
嵌入式系统软件设计中的常用算法
周航慈 / 2010-1 / 24.00元
《嵌入式系统软件设计中的常用算法》根据嵌入式系统软件设计需要的常用算法知识编写而成。基本内容有:线性方程组求解、代数插值和曲线拟合、数值积分、能谱处理、数字滤波、数理统计、自动控制、数据排序、数据压缩和检错纠错等常用算法。从嵌入式系统的实际应用出发,用通俗易懂的语言代替枯燥难懂的数学推导,使读者能在比较轻松的条件下学到最基本的常用算法,并为继续学习其他算法打下基础。 《嵌入式系统软件设计中的......一起来看看 《嵌入式系统软件设计中的常用算法》 这本书的介绍吧!