您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python bsonrpc源碼是什么”,在日常操作中,相信很多人在Python bsonrpc源碼是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python bsonrpc源碼是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
bsonrpc 是python中?個基于json或bson的遠程過程調(diào)?的庫,提供了服務(wù)端與客戶端實現(xiàn),其底層采?的是基于TCP連接的通信。
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標準中的不同消息結(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)
如上圖所示,程序采?的是對象組合的?式實現(xiàn)消息分包處理的。對象組合是繼承之外的另?種選擇,對象組合要求被組合的對象具有良好定義的接?,通過接?的?式調(diào)?其他對象的功能,這個也被“?箱復(fù)?”,因為對象的內(nèi)部細節(jié)是不可?的。SocketQueue中依賴Codec的extract_message()接??法,不?關(guān)?其具體的實現(xiàn)?法。具體實現(xiàn)由JSONCodec和BSONCode進?實現(xiàn)。JSONCodec中依賴JSONFrame中的extract_message()接??法,該接??法的實現(xiàn)由JSONFramingNone、JSONFramingNetstring、JSONFramingRFC7464進?實現(xiàn)。SocketQueue消息組包過程依賴于into_frame()?法,也是通過對象組合實現(xiàn)的。
注:圖中的接?為了?家容易理解才加上了,源碼??并沒有。
到此,關(guān)于“Python bsonrpc源碼是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。