etru_RU

Harjutus 11: Vestlusruum serveri ja klientrakenduse vahel

Loome uue kausta source/repos

Ava kaust ja loo fail package.json käsuga npm init -y.

Avame Visual Studio Code ja installime ws-raamatukogu
(npm install ws).

index.js

const http = require("http")
const fs = require("fs")
const ws = new require("ws")

const wss = new ws.Server({noServer: true});

function accept(req,  res) {
    if(req.url === "/ws" && req.header.upgrade &&
        req.headers.update.toLowerCase() === "websocket" &&
        req.headers.connection.match(/\bupgrade\b/i)){
            wss.handleUpdgrede(req, req.socker, Buffer.alloc(0), onSocketConnect);
    }
    else if (req.url === "/") { //index.html
        fs.createReadStream("./index.html").pipe(req);
    }
    else {
        res.writeHead(404);
        res.end();
    }
}

index.html

<!doctype html>
<form name="publish">
    <input type="text" name="message" maxlength="50"/>
    <input type="submit" value="Send"/>
</form>
 
<div id="messages"></div>
 
<script>
    let url = location.host == 'localhost' ?
        'ws://localhost:8080/ws' : location.host == 'javascript.local' ?
            `ws://javascript.local/article/websocket/chat/ws` : // dev integration with local site
            `wss://javascript.info/article/websocket/chat/ws`; // prod integration with javascript.info
    //создаем объект с вебсокетом
    let socket = new WebSocket(url);
 
    // отправляем сообщение на форму
    document.forms.publish.onsubmit = function() {
        let outgoingMessage = this.message.value;
 
        socket.send(outgoingMessage);
        return false;
    };
 
    // обрабатываем входящие сообщения
    socket.onmessage = function(event) {
        let incomingMessage = event.data;
        showMessage(incomingMessage);
    };
    //если пользователь закрыт сокет, то пишем об этом в консоли
    socket.onclose = event => console.log(`Closed ${event.code}`);
 
    // показываем сообщения в div#messages
    function showMessage(message) {
        let messageElem = document.createElement('div');
        messageElem.textContent = message;
        document.getElementById('messages').prepend(messageElem);
    }
</script>

Tulemuse kontrollimine

Käivitame faili index.js Node.js abil.

Ava fail index.html fail exploreri kaudu.