91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python bsonrpc源碼是什么

發布時間:2021-03-15 10:46:10 來源:億速云 閱讀:235 作者:TREX 欄目:開發技術

這篇文章主要介紹“Python bsonrpc源碼是什么”,在日常操作中,相信很多人在Python bsonrpc源碼是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python bsonrpc源碼是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

bsonrpc 是python中?個基于json或bson的遠程過程調?的庫,提供了服務端與客戶端實現,其底層采?的是基于TCP連接的通信。

程序結構

Python bsonrpc源碼是什么

bsonrpc主要包括以下?件:

  1. concurrent.py:針對兩種并發?式(threading線程對象、gevent協程對象)涉及的相應組件(Queue,Event,Lock等)提供統?的對外的?成接?:spawn(),new_promise(),new_queue(), new_lock()等;

  2. definitions.py:定義rpc的消息結構和錯誤編碼;

  3. dispatcher.py:rpc的處理調度,路由處理(消息對應的處理函數);

  4. exceptions.py:異常定義;

  5. framing.py:定義不同類實現JSON RPC 2.0標準中的不同消息結構;

  6. interfaces.py:定義提供服務的裝飾器;

  7. misc.py:該?件中定義了?個id?成器,從1開始累加。

  8. options.py:定義配置選項。

  9. rpc.py:主要為BSONRpc和JSONRpc類的實現;

  10. socket_queue.py:主要為消息的拆包組包部分;

  11. util.py:系統?具。

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

解讀

socket_queue.py中的SocketQueue類是?來處理從socket接收數據,主要的?法為_receiver()和put()?法,分別對應分包和組包,分包的主要內容如下:

def _receiver(self):
  bbuffer = b''
  while True:
    try:
      chunk = self.socket.recv(self.BUFSIZE) # 從socket上接收數據
      bbuffer = self._to_queue(bbuffer + chunk) # 數據分包
    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

組包的主要內容如下:

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源碼是什么

如上圖所示,程序采?的是對象組合的?式實現消息分包處理的。對象組合是繼承之外的另?種選擇,對象組合要求被組合的對象具有良好定義的接?,通過接?的?式調?其他對象的功能,這個也被“?箱復?”,因為對象的內部細節是不可?的。SocketQueue中依賴Codec的extract_message()接??法,不?關?其具體的實現?法。具體實現由JSONCodec和BSONCode進?實現。JSONCodec中依賴JSONFrame中的extract_message()接??法,該接??法的實現由JSONFramingNone、JSONFramingNetstring、JSONFramingRFC7464進?實現。SocketQueue消息組包過程依賴于into_frame()?法,也是通過對象組合實現的。

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

到此,關于“Python bsonrpc源碼是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西昌市| 收藏| 乌拉特中旗| 洪洞县| 白河县| 海丰县| 梓潼县| 宁国市| 二手房| 吉林省| 吉木乃县| 盖州市| 淳化县| 崇左市| 武义县| 巧家县| 佳木斯市| 芜湖县| 扬中市| 宜宾县| 大竹县| 咸丰县| 新绛县| 砀山县| 荥阳市| 浪卡子县| 喀喇| 诸城市| 准格尔旗| 思茅市| 麻江县| 渝北区| 鄄城县| 那曲县| 康定县| 桂阳县| 紫云| 乐陵市| 泰州市| 永川市| 白山市|