首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在NodeJS/ESP32 32中通过WebSocket发送二进制数据-如何识别二进制和文本消息

在NodeJS/ESP32 32中通过WebSocket发送二进制数据-如何识别二进制和文本消息
EN

Stack Overflow用户
提问于 2022-07-26 21:46:04
回答 1查看 296关注 0票数 2

我正在研制一台带有ESP32-Cam和NodeJS服务器的闭路电视摄像机.我想这样做的方法是在ESP上使用WebSocket客户端,并将包含捕获帧的二进制数据发送到NodeJS服务器,然后由NodeJS服务器将其转发给连接的用户。我不能使用socket.io,所以我使用普通的websockets (在节点'ws‘模块上)。

我正在苦苦挣扎的是,在发送二进制数据时,我无法判断它是什么类型的,也就是说它是流、缩略图还是普通的json消息。

我的ESP32-Cam客户端代码(C++):

代码语言:javascript
运行
复制
void liveCam(uint8_t num){
    //capture a frame
    camera_fb_t * fb = esp_camera_fb_get();
    if (!fb) {
        Serial.println("Frame buffer could not be acquired");
        return;
    }

    webSocket.sendBIN(num, fb->buf, fb->len);

    //return the frame buffer back to be reused
    esp_camera_fb_return(fb);
}

我在Node做的是:

代码语言:javascript
运行
复制
this.socket.on("connection", (ws) => {
            ws.on("message", (msg) => {
                // recognize channel of msg and process it (ArrayBuffer / JSON String)
            })
        })

为了发送JSON,我将在ESP上使用webSocket.sendTXT (使用WebSocketsServer库)方法,只是不知道如何处理服务器上的二进制消息和文本消息,以及如何让服务器识别它们(类似于消息标记,因此二进制流将是“流”,而json将是“眨眼”或"fetch_temp",这取决于使用情况)。如果没有二进制流,我将只使用json进行处理,因此每个消息都有一个“标记”和" message“属性,但是图像流会使事情复杂化。

--我有一个想法,在二进制消息之前发送一条json文本消息,这将设置下一条消息发送的通道。只是不知道它是否能工作,如果消息不同步就不会中断(这有可能吗?)另外,我需要一个解决方案尽可能快的(为了保持良好的帧视频,现在清晰的二进制流真的很好!)

感谢任何(好的)想法和解决方案!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-27 04:03:52

您在问如何区分您通过web套接字发送的数据是二进制的还是JSON的。容易解决的问题。正如您所指出的,只需在数据前面加上对下一步的指示。如果您担心性能问题,不要发送JSON作为前缀,只发送一个字符--比如,"B“表示下一条消息是二进制的,或者"J”表示它是JSON。

不,除非您的代码出错,否则websocket消息不能不同步。Websockets提供可靠的有序字节流。每个字节保证按顺序接收,准确地正确地接收一次,否则如果websocket不能这样做,您将收到一个错误。“正确”对未加密的连接来说有点牵强--未加密的网络套接字可以防止简单的网络错误,但不会防止攻击者故意篡改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73130077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档