国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Python bsonrpc源碼解讀

瀏覽:101日期:2022-06-25 08:53:42

bsonrpc 是python中⼀個基于json或bson的遠(yuǎn)程過程調(diào)⽤的庫,提供了服務(wù)端與客戶端實現(xiàn),其底層采⽤的是基于TCP連接的通信。

程序結(jié)構(gòu)

Python bsonrpc源碼解讀

bsonrpc主要包括以下⽂件:

concurrent.py:針對兩種并發(fā)⽅式(threading線程對象、gevent協(xié)程對象)涉及的相應(yīng)組件(Queue,Event,Lock等)提供統(tǒng)⼀的對外的⽣成接⼝:spawn(),new_promise(),new_queue(), new_lock()等; definitions.py:定義rpc的消息結(jié)構(gòu)和錯誤編碼; dispatcher.py:rpc的處理調(diào)度,路由處理(消息對應(yīng)的處理函數(shù)); exceptions.py:異常定義; framing.py:定義不同類實現(xiàn)JSON RPC 2.0標(biāo)準(zhǔn)中的不同消息結(jié)構(gòu); interfaces.py:定義提供服務(wù)的裝飾器; misc.py:該⽂件中定義了⼀個id⽣成器,從1開始累加。 options.py:定義配置選項。 rpc.py:主要為BSONRpc和JSONRpc類的實現(xiàn); socket_queue.py:主要為消息的拆包組包部分; util.py:系統(tǒng)⼯具。

本⽂主要描述庫包中對于不同協(xié)議的分包組包的處理,涉及到socket_queue.py和framing.py⽂件,主要采⽤的是對象組合的技術(shù)。

解讀

socket_queue.py中的SocketQueue類是⽤來處理從socket接收數(shù)據(jù),主要的⽅法為_receiver()和put()⽅法,分別對應(yīng)分包和組包,分包的主要內(nèi)容如下:

def _receiver(self): bbuffer = b’’ while True: try: chunk = self.socket.recv(self.BUFSIZE) # 從socket上接收數(shù)據(jù) bbuffer = self._to_queue(bbuffer + chunk) # 數(shù)據(jù)分包 except DecodingError as e: self._queue.put(e) # 后⾯省略...def _to_queue(self, bbuffer): b_msg, bbuffer = self.codec.extract_message(bbuffer) # 解碼器提取完整的信息 while b_msg is not None: self._queue.put(self.codec.loads(b_msg)) # 解碼后的消息放⼊消息隊列中等待處理 b_msg, bbuffer = self.codec.extract_message(bbuffer) return bbuffer

組包的主要內(nèi)容如下:

def put(self, item): if self._closed: raise BsonRpcError(’Attempt to put items to closed queue.’) msg_bytes = self.codec.into_frame(self.codec.dumps(item)) # 組包 with self._lock: self.socket.sendall(msg_bytes)

Python bsonrpc源碼解讀

如上圖所示,程序采⽤的是對象組合的⽅式實現(xiàn)消息分包處理的。對象組合是繼承之外的另⼀種選擇,對象組合要求被組合的對象具有良好定義的接⼝,通過接⼝的⽅式調(diào)⽤其他對象的功能,這個也被“⿊箱復(fù)⽤”,因為對象的內(nèi)部細(xì)節(jié)是不可⻅的。SocketQueue中依賴Codec的extract_message()接⼝⽅法,不⽤關(guān)⼼其具體的實現(xiàn)⽅法。具體實現(xiàn)由JSONCodec和BSONCode進(jìn)⾏實現(xiàn)。JSONCodec中依賴JSONFrame中的extract_message()接⼝⽅法,該接⼝⽅法的實現(xiàn)由JSONFramingNone、JSONFramingNetstring、JSONFramingRFC7464進(jìn)⾏實現(xiàn)。SocketQueue消息組包過程依賴于into_frame()⽅法,也是通過對象組合實現(xiàn)的。

注:圖中的接⼝為了⼤家容易理解才加上了,源碼⾥⾯并沒有。

以上就是Python bsonrpc源碼解讀的詳細(xì)內(nèi)容,更多關(guān)于Python bsonrpc源碼的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 男女性关系视频免费观看软件 | 三级国产在线观看 | 国产一级一片免费播放视频 | 欧美啊啊啊| 国产综合亚洲专区在线 | 亚洲欧洲一级 | 波多野结衣免费观看视频 | 综合欧美视频一区二区三区 | 欧美在线国产 | 午夜三级a三级三点在线观看 | 国产精品久久久久久久久免费观看 | 大伊香蕉精品视频在线 | 精品国产精品久久一区免费式 | 日韩欧美印度一级毛片 | 中文字幕在线观看不卡视频 | 亚色成人| 国产亚洲精品久久综合影院 | 国产欧美一区二区三区久久 | 国产亚洲精品片a77777 | 国产精品亚洲玖玖玖在线靠爱 | 国产亚洲精品九九久在线观看 | 中文字幕在线观看国产 | 国内xxxx乱子另类 | 99精品免费在线 | 色一伦一情一区二区三区 | 国产午夜精品久久久久九九 | 男女性关系视频免费观看软件 | 国产一区二区三区不卡在线观看 | 福利片免费一区二区三区 | 手机看片在线精品观看 | 性欧美美国级毛片 | 一区在线免费观看 | 成年午夜性爽快免费视频不卡 | 欧美另类综合 | 男人的天堂久久爱 | 色悠久 | 久久骚| 中文在线观看视频 | 日本欧美一区二区三区在线 | 欧美综合视频在线观看 | 欧美成年人视频 |