<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      zmq模塊的理解和使用二

      1. 問題描述

      在之前的文章里(zmq模塊的理解和使用),寫過zmq有三種模式供選擇,我工作中主要采用PUB-SUB模式。使用場景主要包括一個server端和多個client端:

        server端:進行視頻讀取,并對每張圖片進行目標檢測和跟蹤,采用PUB模式,將檢測和跟蹤結果廣播出去

        client端:有多個客戶端,采用SUB模式,接收PUB端的數據,然后對數據進行處理

      最近碰到了一個問題, 就是client端有時候會收不到server的數據,而且程序捕捉不到任何異常。網上找了些資料看,由于網絡環境不穩定,導致zmq底層的tcp連接不穩定,無法返回斷開狀態, 導致zmq自動重連機制無法生效。目前的解決方案有兩類:

        1. 采用zmq提供的TCP Keepalive

        2. 自己實現心跳模式,超時進行重連

      通過比較后,決定采用心跳模式,靈活性和可靠性更強一點。

      2. 解決方案測試

      寫了個接單的模擬代碼,打算測試幾天觀察下效果

      server:

      服務端采用兩個topic,一個topic用來發送心跳數據(每隔1秒),另一個topic發送業務數據(目標檢測)。服務端示例代碼如下:

      import zmq
      import time
      import random
      
      def start_server(topics, url, port):
          ctx = zmq.Context()
          send_scoket = ctx.socket(zmq.PUB)
          responseUrl = "tcp://{}:{}".format(url, port)
          print("bind to: {}".format(responseUrl))
          send_scoket.bind(responseUrl)
          last_heartbeat = time.time()
          i = 1
          while True:
              # 每隔1秒,發送心跳數據
              if time.time()-last_heartbeat > 1:
                  send_scoket.send_multipart([topics[1].encode("utf-8"), b'heartbeat'])
                  last_heartbeat = time.time()
                  print(i, "send heartbeat")
      
              # 以一定概率發送檢測數據,模擬視頻目標檢測
              if random.random() < 0.2:
                  detection_message = "message{} for {}".format(i, topics[0])
                  send_scoket.send_multipart([topics[0].encode("utf-8"), detection_message.encode("utf-8")])
                  print(i, "send detection_message")
      
              i += 1
              time.sleep(0.5)
      
      
      if __name__ =="__main__":
          topics = ['detection', 'heartbeat']
          url = "127.0.0.1"
          port = 4488
          start_server(topics, url, port)

      client:

      客戶端訂閱服務端的兩個topic,同時接收服務端的心跳數據和業務數據,每次都判斷有多長時間沒有接收到心跳數據,如果心跳數據超時,就進行重新連接。客戶端采用示例代碼如下,

      import zmq
      import time
      
      
      def start_client1(topics, url, port):
          ctx = zmq.Context()
          recv_scoket = ctx.socket(zmq.SUB)
          requestUrl = "tcp://{}:{}".format(url, port)
          print("connect to: {}".format(requestUrl))
          recv_scoket.connect(requestUrl)
          for topic in topics:
             recv_scoket.subscribe(topic)
          last_heartbeat = 0
          while True:
              # 30秒收不到server的心跳數據,就進行重新連接
              if last_heartbeat != 0 and time.time() - last_heartbeat > 30:
                  recv_scoket.disconnect(requestUrl)
                  recv_scoket.connect(requestUrl)
                  for topic in topics:
                      recv_scoket.subscribe(topic)
                  print("Reconnect pub server")
                  time.sleep(2)   # 每2秒重試連接,重連太頻繁會導致接收不了數據
              try:
                  data = recv_scoket.recv_multipart(flags=1)
                  datatopic = data[0].decode()
                  if datatopic.startswith("heartbeat"):  # 接收到心跳數據后,更新心跳接收到的時間
                      last_heartbeat = time.time()
                  print("receive message: ", data[1].decode("utf-8"))
              except zmq.error.Again as e:
                  # print(e)
                  pass
      
      
      if __name__ == "__main__":
          topics = ['detection', 'heartbeat']
          url = "192.168.2.139"
          port = 4488
          start_client1(topics, url, port)

       

      參考文檔:

        參考一: (PUB/SUB) Sub Silent Disconnect on Unreliable Connection · Issue #1199 · zeromq/libzmq · GitHub

        參考二:https://blog.csdn.net/bubbleyang/article/details/107559224

        參考三: https://blog.csdn.net/sinat_36265222/article/details/107252069

      posted @ 2021-10-28 20:29  silence_cho  閱讀(1672)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本高清一区免费中文视频| 国产成人综合网在线观看| 久久国产精品老人性| 桃花岛亚洲成在人线AV| 蜜臀av一区二区三区日韩| 精品国产亚洲一区二区三区在线观看| 新田县| 亚洲天堂成人黄色在线播放| 亚洲一区二区精品动漫| 日日躁夜夜躁狠狠久久av| 精品久久精品久久精品九九| 久久精品国产亚洲av熟女| 骚虎视频在线观看| 亚洲av一本二本三本| 亚洲欧洲久久激情久av| 九九热视频在线播放| 无码一区二区三区av在线播放| 亚洲一区二区av观看| yw尤物av无码国产在线观看| 亚洲av一本二本三本| 日韩人妻精品中文字幕| 乱中年女人伦av二区| 久久视频这里只精品| 亚洲成人精品综合在线| 99精品全国免费观看视频| 久久国产国内精品国语对白| 国产精品日日摸夜夜添夜夜添无码| 无码福利一区二区三区| 蜜桃一区二区三区在线看| 国产精品美女一区二区三| 性视频一区| 狠狠色噜噜狠狠狠狠av不卡| 色综合激情丁香七月色综合| 97久久精品人人做人人爽| 国精品无码一区二区三区在线看 | 在线视频中文字幕二区| 欧美国产激情18| 视频一区二区三区四区不卡| 东京热人妻无码一区二区av| 性欧美老人牲交xxxxx视频 | 免费现黄频在线观看国产|