直接从uWebsockets服务器读取uint8array

时间:2017-06-23 14:15:21

标签: javascript c++ websocket

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

我发现了一个关于repo问题的问题,这些问题描述了text / 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数组读取不起作用,我不能在我的生活中弄清楚如何读取这些数据以使数据可用。请注意,回到客户端的回声确实有效 - 我收回了我的内容。

1 个答案:

答案 0 :(得分:0)

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

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);
});