Flask Socket IO,需要帮助理解为什么消息会变大 大家好

问题描述

大家好

我的工作:

我通过 Flask socket-io 将实时相机图像数据(jpeg 编码为二进制)传输到客户端, 套接字消息有一个框架和一些元数据。

每条发出的消息总共大约 ~350KB。

当我流式传输一台相机时,chrome devtools 上的套接字消息的大小向我显示了正确的大小。

Dev tools singel cam

当我流式传输多个摄像头的套接字消息时,有时会增长到 3MB,当我在 python 端记录大小时,每个发出的消息仍然约为 350KB。

Dev tools multiple cameras

谁能解释一下为什么会这样?谢谢

代码

这个函数在python端发送帧

@socket_io.on('frame_request')
def connect(data):
    while app.socket_online:
        frame = app.dm.get_frame_as_bytes(data["id"])
        emit('data',{'Meta': app.dm.get_Meta_data(data["id"]),'frame': frame})
        socket_io.sleep(1/12)

这个函数接收传入的帧

handle_frame(frame) {
   var blob = new Blob([frame],{
       type: 'image/jpeg'
   });
   var url_create = window.URL || window.webkitURL;
   var imageUrl = url_create.createObjectURL(blob);
   this.img = imageUrl;
}

解决方法

您正在使用 Socket.IO 的轮询传输。这种传输可以在某些情况下,当以高频率发送时,将多个数据包合并到一个轮询响应中以提高效率。

如果您启用 WebSocket(无论如何您应该启用它,因为它会给您带来更好的性能),那么每个帧都将在其自己的单独数据包中发送。