У меня есть сервер, который предоставляет конечную точку для веб-сокетов. Я использую 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 с результатом с сервера. Поэтому мне нужны сообщения, прежде чем я верну значение из функции.