Javascript asynchron WebSocket - PullRequest
       6

Javascript asynchron WebSocket

0 голосов
/ 03 апреля 2020

У меня есть сервер, который предоставляет конечную точку для веб-сокетов. Я использую Javascript в браузере для отправки данных на сервер в веб-сокете.

После первого сообщения от клиента сервер начинает обработку данных. Вскоре после этого (50-100 мс) сервер отправит клиенту несколько сообщений.

Это мой очень упрощенный код:

<!DOCTYPE html>
<html>
<body>
<button onclick="myFunction()">Click me</button>

<script>

var ws = null;

window.onload = function () {
    ws = new WebSocket("ws://localhost/client");
}

function sleep(ms) {
    const date = Date.now();
    let currentDate = null;
    do {
        currentDate = Date.now();
    } while (currentDate - date < ms);
}

function myFunction() {
    var messages = new Array();

    ws.onmessage = function (event) {
        console.debug(event.data);
        messages.push(event.data);
    }

    console.error('1');
    let myData = "CONTENT DOES NOT MATTER";

    console.error('2');
    ws.send(myData);
    console.error('3');

    // polling
    for (let i = 0; i < 50; ++i) {
        if (messages.length > 0) {
            console.warn(messages.pop());
        }
        sleep(100);
    }

    console.error('4');
    return true; /*or false*/
}
</script>

</body>
</html>

Проблема в том, что переменные сообщения пусты и функция ws.onmessage не вызывается в части блокировки / опроса. Есть ли решение с Javascript, где я могу написать код блокировки И получить / опросить сообщения от клиента websocket внутри блокирующей части?

Причина, по которой мне это нужно, заключается в том, что я определяю возвращаемое значение myFunction с результатом с сервера. Поэтому мне нужны сообщения, прежде чем я верну значение из функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...