Mam taki temat mam dashboard na którym jest kilkanaście elementów i tam przyciski z różnymi klasami, i w zależności w jakim statusie jest dany element to ma on inną klasę np element ma klasę .error albo .alert
I teraz załóżmy ze mam 10 obiektów z klasą .error
Wywołuję selektorem kliknięcie na element .error więc powinno się tych 10 elementów kliknąc w ułamku sekundy wszystkie na raz i teoretycznie tak się dzieje ponieważ w konsoli otrzymuje 10 wpisów "WebSocket communication initiated." lecz nie tworzy 10 niezależnych websocketów.
To jest kod który zrobiłem, chciałem aby po kliknięciu wywołac odpytanie poprzez javascript by asynchronicznie odwołał się poprzez websocket do serwera php i po zakończeniu wrzuciło zwrotki z serwera php.
Lecz problem w tym że niby uruchomiło się 10 odwołań ale na serwerze php widzę jak przeglądarka się łączy poprzez websocket jeden po drugim, nie robi się 10 socketów na raz tylko robi się 1 socket wykonywana jest operacja w php (pętla trwająca 5 sekund) i zwraca do klienta odpowiedź i robi się 2 socket itd.
function sendMessage(ws, message) { return new Promise((resolve, reject) => { ws.onmessage = (event) => { console.log('Message received:', event.data); resolve(event.data); }; ws.onerror = (error) => { console.error('WebSocket error:', error); reject(error); }; ws.send(message); }); } async function handleWebSocketCommunication(url, message) { try { const ws = await createWebSocket(url); const response = await sendMessage(ws, message); console.log('Response from server:', response); ws.close(); // Zamknięcie połączenia WebSocket po odebraniu odpowiedzi } catch (error) { console.error('Error:', error); } } $('body').on('click', '.execute_import', async () => { // Wywołanie handleWebSocketCommunication w osobnym kontekście asynchronicznym var host = "wss://localhost:8089"; handleWebSocketCommunication(host, 'Wiadomosc do serwera'); console.log('WebSocket communication initiated.'); });
I w konsoli serwera php widze że sockety sa tworzone jeden po drugim o odstępie okolo 5 sekund czyli po sleepie. A oczekiwanym efektem jest by wszystkie sockety zrobiły się na raz i zwrociły wyniki po tym jak serwer będzie przez websocket wysyłał odpowiedź.