【问题标题】:Read uint8array directly from uWebsockets server直接从 uWebsockets 服务器读取 uint8array
【发布时间】:2017-06-23 14:15:20
【问题描述】:

我正在尝试使用 uWebSockets 库来读取从 Web 客户端发送的二进制 ArrayBuffer 数据。

我发现了一个关于 repo 问题的问题,该问题描述了文本/blob 数据的情况,但我想解析来自 Web 客户端的 uint8array 数据:

我正在使用非常简单的示例客户端:

int main()
{
    uWS::Hub h;

    h.onMessage([](uWS::WebSocket<uWS::SERVER> *ws, char *message, size_t length, uWS::OpCode opCode) {
        uint8_t messageString [length]; //Create char array with length of message length
        cout << "length: " << length << endl;
        for (int i = 0; i < length; i++) { //Iterate through each character in the message
          messageString[i] = (uint8_t)message[i];   //Add message character to messageString
        }
        cout << "Message: " << &messageString[1] << endl;

        ws->send (message, length, opCode);
    });

    h.listen (3000);
    h.run();
}

在客户端我这样做:

 {
     ws = new WebSocket(wsUri);
     ws.binaryType = "arraybuffer";
     ws.onopen     = function (evt) { onOpen(evt) };
     ws.onclose    = function (evt) { onClose(evt) };
     ws.onmessage  = function (evt) { onMessage(evt) };
     ws.onerror    = function (evt) { onError(evt) };
 }

并通过套接字发送uint8array。 text/blob 示例不起作用,尝试将其读取为 uint8_t 数组不起作用,我终生无法弄清楚如何读取它以使数据可用。请注意,返回给客户端的回显确实有效 - 我会取回我输入的内容。

【问题讨论】:

    标签: javascript c++ websocket


    【解决方案1】:

    从客户端读取数据并对其进行响应非常简单:

    h.onMessage([](uWS::WebSocket<uWS::SERVER> *ws, char *message, size_t, length, uWS::OpCode opCode) {
        std::string receivedMessage(message, length);
        ws->send("Reponse from server", uWS::OpCode::BINARY);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多