欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python bsonrpc源碼解讀

 更新時間:2021年03月13日 15:11:07   作者:控維通信  
這篇文章主要介紹了Python bsonrpc源碼的相關資料,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下

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

程序結構

bsonrpc主要包括以下⽂件:

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

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

解讀

socket_queue.py中的SocketQueue類是⽤來處理從socket接收數(shù)據(jù),主要的⽅法為_receiver()和put()⽅法,分別對應分包和組包,分包的主要內(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)⽤其他對象的功能,這個也被“⿊箱復⽤”,因為對象的內(nèi)部細節(jié)是不可⻅的。SocketQueue中依賴Codec的extract_message()接⼝⽅法,不⽤關⼼其具體的實現(xiàn)⽅法。具體實現(xiàn)由JSONCodec和BSONCode進⾏實現(xiàn)。JSONCodec中依賴JSONFrame中的extract_message()接⼝⽅法,該接⼝⽅法的實現(xiàn)由JSONFramingNone、JSONFramingNetstring、JSONFramingRFC7464進⾏實現(xiàn)。SocketQueue消息組包過程依賴于into_frame()⽅法,也是通過對象組合實現(xiàn)的。

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

以上就是Python bsonrpc源碼解讀的詳細內(nèi)容,更多關于Python bsonrpc源碼的資料請關注腳本之家其它相關文章!

相關文章

  • 使用pyinstaller打包django的方法實現(xiàn)

    使用pyinstaller打包django的方法實現(xiàn)

    本文主要介紹了使用pyinstaller打包django的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Python統(tǒng)計文本詞匯出現(xiàn)次數(shù)的實例代碼

    Python統(tǒng)計文本詞匯出現(xiàn)次數(shù)的實例代碼

    這篇文章主要介紹了Python統(tǒng)計文本詞匯出現(xiàn)次數(shù),這種問題在統(tǒng)計文本詞匯的次數(shù)時經(jīng)常會遇到,今天給大家分享解決方案,通過實例代碼給大家講解,需要的朋友可以參考下
    2020-02-02
  • python實現(xiàn)的系統(tǒng)實用log類實例

    python實現(xiàn)的系統(tǒng)實用log類實例

    這篇文章主要介紹了python實現(xiàn)的系統(tǒng)實用log類,實例分析了Python基于logging模塊實現(xiàn)日志類的相關技巧,需要的朋友可以參考下
    2015-06-06
  • python中的迭代和可迭代對象代碼示例

    python中的迭代和可迭代對象代碼示例

    這篇文章主要介紹了python中的迭代和可迭代對象代碼示例,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Python串口通信的接收與發(fā)送的實現(xiàn)

    Python串口通信的接收與發(fā)送的實現(xiàn)

    串口通信是指通過串口進行數(shù)據(jù)傳輸?shù)囊环N通信方式,本文就來介紹一下Python串口通信的接收與發(fā)送的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 使用Python實現(xiàn)為PDF文檔設置背景色或背景圖

    使用Python實現(xiàn)為PDF文檔設置背景色或背景圖

    PDF作為一種跨平臺、高保真的文件格式被廣泛應用,這篇文章主要為大家詳細介紹了如何使用Python代碼對PDF文檔進行頁面背景色或背景圖片的設置,需要的可以參考下
    2024-04-04
  • Python實現(xiàn)將Excel轉換成為image的方法

    Python實現(xiàn)將Excel轉換成為image的方法

    今天小編就為大家分享一篇Python實現(xiàn)將Excel轉換成為image的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python求定積分之quad函數(shù)詳解

    python求定積分之quad函數(shù)詳解

    這篇文章主要介紹了python求定積分之quad函數(shù)詳解,SciPy下實現(xiàn)求函數(shù)的積分的函數(shù)的基本使用,積分,高等數(shù)學里有大量的講述,基本意思就是求曲線下面積之和,需要的朋友可以參考下
    2023-08-08
  • 利用Python實現(xiàn)從PDF到CSV的轉換

    利用Python實現(xiàn)從PDF到CSV的轉換

    將PDF轉換為CSV極大地提升了數(shù)據(jù)的實用價值,Python作為一種強大的編程語言,能夠高效完成這一轉換任務,本文將介紹如何利用Python實現(xiàn)從PDF到CSV的轉換,需要的朋友可以參考下
    2024-07-07
  • 詳解python??OpenCV如何使用背景分離方法

    詳解python??OpenCV如何使用背景分離方法

    這篇文章主要為大家介紹了python?OpenCV如何使用背景分離方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論