Размещено: 2023-12-05 00:08:26
Теги: node js, вебсокеты
ВЕБСОКЕТ СЕРВЕР НА NODE JS
Код на сервере, server.js:
console.log('zapusk'); const http = require('http'); const ws = require('ws'); const wss = new ws.Server({noServer: true}); function accept(req, res) { // все входящие запросы должны использовать websockets if (!req.headers.upgrade || req.headers.upgrade.toLowerCase() != 'websocket') { res.end(); return; } // может быть заголовок Connection: keep-alive, Upgrade if (!req.headers.connection.match(/\bupgrade\b/i)) { res.end(); return; } wss.handleUpgrade(req, req.socket, Buffer.alloc(0), onConnect); } function onConnect(ws) { ws.on('message', function (message) { ws.send(`Привет с сервера, принятые данные: ${message}`); setTimeout(() => ws.close(1000, "Пока!"), 5000); }); } if (!module.parent) { http.createServer(accept).listen(8000); } else { exports.accept = accept; }
Код у пользователя в браузере, index.html:
<form name="publish"> <input type="text" name="message" maxlength="50"/> <input type="submit" value="Send"/> </form> <div id="messages"></div> <script> let socket = new WebSocket('ws://ws.scanword.org:8080'); // отправка сообщения из формы document.forms.publish.onsubmit = function() { let outgoingMessage = this.message.value; socket.send(outgoingMessage); return false; }; // socket.onopen = function(e) { alert("Соединение установлено"); }; //прием socket.onmessage = function(event) { let incomingMessage = event.data; showMessage(incomingMessage); }; //отображение того что приняли function showMessage(message) { let messageElem = document.createElement('div'); messageElem.textContent = message; document.getElementById('messages').prepend(messageElem); } socket.onclose = function(event) { if (event.wasClean) { alert(`[close] Соединение закрыто чисто, код=${event.code} причина=${event.reason}`); } else { // например, сервер убил процесс или сеть недоступна // обычно в этом случае event.code 1006 alert('[close] Соединение прервано'); } }; socket.onerror = function(error) { alert(`[error]`); }; </script>
На эту страницу чаще всего попадают по запросам: