Parcourir la source

优化消息响应速度

rambo il y a 6 mois
Parent
commit
27d0c75262

+ 21 - 17
python/mcu/capture/smart_shooter_class.py

@@ -25,6 +25,8 @@ class SmartShooter(metaclass=SingletonType):
         # 实时预览状态
         self.perview_state = False
         self.callback_listen = None
+        self.listen_init = False
+        self.websocket = None
         # loop = asyncio.get_event_loop()
         # loop.create_task(
         #         self.connect_listen(),
@@ -43,9 +45,9 @@ class SmartShooter(metaclass=SingletonType):
         context = zmq.Context()
         req_socket = context.socket(zmq.REQ)
         # 设置发送超时为 5000 毫秒(5 秒)
-        req_socket.setsockopt(zmq.RCVTIMEO, 5000)
+        req_socket.setsockopt(zmq.RCVTIMEO, 2000)
         # 设置接收超时为 5000 毫秒(5 秒)
-        req_socket.setsockopt(zmq.SNDTIMEO, 5000)
+        req_socket.setsockopt(zmq.SNDTIMEO, 2000)
         req_socket.setsockopt(zmq.LINGER, 0)  # 设置为 0 表示不等待未完成的操作
         req_socket.connect(self.SET_REQ)
         return req_socket, context
@@ -55,9 +57,9 @@ class SmartShooter(metaclass=SingletonType):
         listen_socket = context.socket(zmq.SUB)
         listen_socket.setsockopt(zmq.SUBSCRIBE, b"")
         # 设置发送超时为 5000 毫秒(5 秒)
-        listen_socket.setsockopt(zmq.RCVTIMEO, 5000)
+        listen_socket.setsockopt(zmq.RCVTIMEO, 2000)
         # 设置接收超时为 5000 毫秒(5 秒)
-        listen_socket.setsockopt(zmq.SNDTIMEO, 5000)
+        listen_socket.setsockopt(zmq.SNDTIMEO, 2000)
         listen_socket.setsockopt(zmq.LINGER, 0)  # 设置为 0 表示不等待未完成的操作
         listen_socket.connect(self.LISTEN_REQ)
         return listen_socket, context
@@ -88,7 +90,7 @@ class SmartShooter(metaclass=SingletonType):
                         "msg_type": self.msg_type,
                         "device_status": -1,
                     }
-                    await self.websocket_manager.broadcast(message)
+                    await self.websocket_manager.send_personal_message(message,self.websocket)
                 return False, msg_send
             cameraInfo = json_msg.get("CameraInfo")
             if cameraInfo == None or len(cameraInfo) == 0:
@@ -102,7 +104,7 @@ class SmartShooter(metaclass=SingletonType):
                         "msg_type": self.msg_type,
                         "device_status": -1,
                     }
-                    await self.websocket_manager.broadcast(message)
+                    await self.websocket_manager.send_personal_message(message,self.websocket)
                 return False, "相机未连接"
             # 链接的相机
             # connect_camera = cameraInfo
@@ -121,7 +123,7 @@ class SmartShooter(metaclass=SingletonType):
                         "msg_type": self.msg_type,
                         "device_status": -1,
                     }
-                    await self.websocket_manager.broadcast(message)
+                    await self.websocket_manager.send_personal_message(message,self.websocket)
                 return False, msg_send
             self.connect_status = True
             msg_send = "相机已连接"
@@ -133,7 +135,7 @@ class SmartShooter(metaclass=SingletonType):
                     "msg_type": self.msg_type,
                     "device_status": 2,
                 }
-                await self.websocket_manager.broadcast(message)
+                await self.websocket_manager.send_personal_message(message,self.websocket)
             return True, "相机已连接"
         except:
             self.connect_status = False
@@ -148,7 +150,7 @@ class SmartShooter(metaclass=SingletonType):
                     "msg_type": self.msg_type,
                     "device_status": -1,
                 }
-                await self.websocket_manager.broadcast(message)
+                await self.websocket_manager.send_personal_message(message,self.websocket)
             return False, msg_send
 
     async def EnableCameraPreview(self, enable_status=True, msg_type=""):
@@ -186,7 +188,7 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": 2,
             }
-            await self.websocket_manager.broadcast(message)
+            await self.websocket_manager.send_personal_message(message,self.websocket)
             return True, "预览启用成功" if enable_status else "预览关闭成功"
         except:
             self.perview_state = False
@@ -200,7 +202,7 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": -1,
             }
-            await self.websocket_manager.broadcast(message)
+            await self.websocket_manager.send_personal_message(message,self.websocket)
             return False, "相机未连接或软件未打开"
 
     async def CameraAutofocus(self):
@@ -255,7 +257,7 @@ class SmartShooter(metaclass=SingletonType):
                     "msg_type": self.msg_type,
                     "device_status": -1,
                 }
-                await self.websocket_manager.broadcast(message)
+                await self.websocket_manager.send_personal_message(message,self.websocket)
                 return False, msg_send
             msg_send = "拍照成功"
             message = {
@@ -265,7 +267,7 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": 2,
             }
-            await self.websocket_manager.broadcast(message)
+            await self.websocket_manager.send_personal_message(message,self.websocket)
             return True, "拍照成功"
         except:
             socket.close()
@@ -278,23 +280,24 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": -1,
             }
-            await self.websocket_manager.broadcast(message)
+            await self.websocket_manager.send_personal_message(message,self.websocket)
             return False, msg_send
 
     async def connect_listen(self):
-        if self.connect_status == True:
+        if self.connect_status == True or self.listen_init == True:
             return True
         # 发起监听
         sub_socket, context = self.__create_listen()
-        print("构建监听")
+        print("构建监听", self.connect_status)
         while True:
+            self.listen_init = True
             await asyncio.sleep(0.01)
             if self.callback_listen == None:
                 continue
             camera_states, camera_msg = await self.GetCameraInfo(is_send=False)
             if not camera_states:
                 print("相机未连接")
-                await asyncio.sleep(5)  # 等待相机连接
+                await asyncio.sleep(0.01)  # 等待相机连接
                 continue
             if self.stop_listen:
                 break
@@ -313,6 +316,7 @@ class SmartShooter(metaclass=SingletonType):
                 self.connect_status = False
                 print(f"发生错误: {e}")
                 break
+        self.listen_init = False
         sub_socket.close()
         context.term()
         print("smart shooter连接断开")

+ 1 - 1
python/sockets/connect_manager.py

@@ -33,5 +33,5 @@ class ConnectionManager:
         for connection in self.active_connections:
             if connection.client_state == WebSocketState.DISCONNECTED:
                 continue
-            print("connection", connection.client_state)
+            print("正在发送广播消息", "message", connection.client_state)
             await connection.send_json(message)

+ 1 - 1
python/sockets/socket_server.py

@@ -18,7 +18,7 @@ from utils.common import message_queue
 async def websocket_endpoint(websocket: WebSocket):
     await conn_manager.connect(websocket)
     active_connections.add(websocket)
-
+    smart_shooter.websocket = websocket
     try:
         # await socket_manager.connect()
         async def handler_messages():