{"id":1942,"date":"2025-09-25T06:23:44","date_gmt":"2025-09-25T06:23:44","guid":{"rendered":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/?page_id=1942"},"modified":"2025-09-25T06:25:54","modified_gmt":"2025-09-25T06:25:54","slug":"harjutus-11-vestlusruum","status":"publish","type":"page","link":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/harjutus-11-vestlusruum\/","title":{"rendered":"Harjutus 11: Vestlusruum"},"content":{"rendered":"\n<p>Avame Terminal&#8217;i ja sisestame j\u00e4rgmiseid <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>mkdir Vestlusruum\ncd Vestlusruum\nnpm init -y\nnpm install ws\ncode .<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">mkdir Vestlusruum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">cd Vestlusruum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">npm init <\/span><span style=\"color: #F286C4\">-<\/span><span style=\"color: #F6F6F4\">y<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">npm install ws<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">code .<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>P\u00e4rast k\u00f5ik me loome &#8220;index.js&#8221; ja sisestame sinna j\u00e4rgmine kood<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const http = require(\"http\")\nconst fs = require(\"fs\")\nconst ws = new require('ws')\n\nconst wss = new ws.Server({noServer: true});\n\nfunction accept(req, res) {\n    if(req.url === \"\/ws\" &amp;&amp;\n        req.headers.upgrade &amp;&amp;\n        req.headers.update.toLowerCase() === \"websocket\" &amp;&amp;\n        req.headers.connection.match(\/\\bupgrade\\b\/i)\n    ){\n            wss.handleUpdgrade(req, req.socket, Buffer.alloc(0), onSocketConnect);\n    }\n    else if (req.url === \"\/\") { \/\/ index.html   \n        fs.createReadStream(\".\/index.html\").pipe(res);\n    }\n    else {\n        res.writeHead(404);\n        res.end();\n    }\n}\n\n\/\/ Kliendide loomine\nconst clients = new Set();\n\n\/\/ \u00dchenduse loomine\nfunction onSocketConnect(ws){\n    clients.add(ws);\n    ws.on('message', function(message) {\n        message = message.slice(0, 50); \/\/ maksimaalne pikkus on 50 s\u00fcmbolid\n        for(let client of clients) {client.send(message);}\n    })\n\n    ws.on('close', function(){\n        console.log(\"connection closed\");\n        clients.delete(ws);\n    })\n}\n\nlet log;\n\nif(!module&#91;\"parent\"&#93;){\n    log = console.log;\n    http.createServer(accept).listen(8080);\n} else {\n    log = function() {};\n    exports.accept = accept;\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">const<\/span><span style=\"color: #F6F6F4\"> http <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">require<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">http<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">const<\/span><span style=\"color: #F6F6F4\"> fs <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">require<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">fs<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">const<\/span><span style=\"color: #F6F6F4\"> ws <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4; font-weight: bold\">new<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">require<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">ws<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">const<\/span><span style=\"color: #F6F6F4\"> wss <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4; font-weight: bold\">new<\/span><span style=\"color: #F6F6F4\"> ws.<\/span><span style=\"color: #62E884\">Server<\/span><span style=\"color: #F6F6F4\">({noServer<\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">true<\/span><span style=\"color: #F6F6F4\">});<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">accept<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">req<\/span><span style=\"color: #F6F6F4\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">res<\/span><span style=\"color: #F6F6F4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">if<\/span><span style=\"color: #F6F6F4\">(req.url <\/span><span style=\"color: #F286C4\">===<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">\/ws<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        req.headers.upgrade <\/span><span style=\"color: #F286C4\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        req.headers.update.<\/span><span style=\"color: #62E884\">toLowerCase<\/span><span style=\"color: #F6F6F4\">() <\/span><span style=\"color: #F286C4\">===<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">websocket<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        req.headers.connection.<\/span><span style=\"color: #62E884\">match<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #EE6666\">\/<\/span><span style=\"color: #F286C4\">\\b<\/span><span style=\"color: #E7EE98\">upgrade<\/span><span style=\"color: #F286C4\">\\b<\/span><span style=\"color: #EE6666\">\/<\/span><span style=\"color: #F286C4\">i<\/span><span style=\"color: #F6F6F4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    ){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            wss.<\/span><span style=\"color: #62E884\">handleUpdgrade<\/span><span style=\"color: #F6F6F4\">(req, req.socket, Buffer.<\/span><span style=\"color: #62E884\">alloc<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #BF9EEE\">0<\/span><span style=\"color: #F6F6F4\">), onSocketConnect);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">else<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">if<\/span><span style=\"color: #F6F6F4\"> (req.url <\/span><span style=\"color: #F286C4\">===<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">\/<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">) { <\/span><span style=\"color: #7B7F8B\">\/\/ index.html   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        fs.<\/span><span style=\"color: #62E884\">createReadStream<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">.\/index.html<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">).<\/span><span style=\"color: #62E884\">pipe<\/span><span style=\"color: #F6F6F4\">(res);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">else<\/span><span style=\"color: #F6F6F4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        res.<\/span><span style=\"color: #62E884\">writeHead<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #BF9EEE\">404<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        res.<\/span><span style=\"color: #62E884\">end<\/span><span style=\"color: #F6F6F4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">\/\/ Kliendide loomine<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">const<\/span><span style=\"color: #F6F6F4\"> clients <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4; font-weight: bold\">new<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">Set<\/span><span style=\"color: #F6F6F4\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">\/\/ \u00dchenduse loomine<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">onSocketConnect<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">ws<\/span><span style=\"color: #F6F6F4\">){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    clients.<\/span><span style=\"color: #62E884\">add<\/span><span style=\"color: #F6F6F4\">(ws);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    ws.<\/span><span style=\"color: #62E884\">on<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">message<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, <\/span><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">message<\/span><span style=\"color: #F6F6F4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        message <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> message.<\/span><span style=\"color: #62E884\">slice<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #BF9EEE\">0<\/span><span style=\"color: #F6F6F4\">, <\/span><span style=\"color: #BF9EEE\">50<\/span><span style=\"color: #F6F6F4\">); <\/span><span style=\"color: #7B7F8B\">\/\/ maksimaalne pikkus on 50 s\u00fcmbolid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">for<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> client <\/span><span style=\"color: #F286C4\">of<\/span><span style=\"color: #F6F6F4\"> clients) {client.<\/span><span style=\"color: #62E884\">send<\/span><span style=\"color: #F6F6F4\">(message);}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    })<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    ws.<\/span><span style=\"color: #62E884\">on<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">close<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, <\/span><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        console.<\/span><span style=\"color: #62E884\">log<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">connection closed<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        clients.<\/span><span style=\"color: #62E884\">delete<\/span><span style=\"color: #F6F6F4\">(ws);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    })<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> log;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F286C4\">if<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #F286C4\">!<\/span><span style=\"color: #97E1F1; font-style: italic\">module<\/span><span style=\"color: #F6F6F4\">&#91;<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">parent<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">&#93;){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    log <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> console.log;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    http.<\/span><span style=\"color: #62E884\">createServer<\/span><span style=\"color: #F6F6F4\">(accept).<\/span><span style=\"color: #62E884\">listen<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #BF9EEE\">8080<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">} <\/span><span style=\"color: #F286C4\">else<\/span><span style=\"color: #F6F6F4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #62E884\">log<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\">() {};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #97E1F1; font-style: italic\">exports<\/span><span style=\"color: #F6F6F4\">.accept <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> accept;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>P\u00e4rast seda loomine &#8220;index.html&#8221; ja sisestame sinna j\u00e4rgmine kood<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;!doctype html>\n&lt;form name=\"publish\">\n    &lt;input type=\"text\" name=\"message\" maxlength=\"50\"\/>\n    &lt;input type=\"submit\" value=\"Send\"\/>\n&lt;\/form>\n \n&lt;div id=\"messages\">&lt;\/div>\n \n&lt;script>\n    let url = location.host == 'localhost' ?\n        'ws:\/\/localhost:8080\/ws' : location.host == 'javascript.local' ?\n            `ws:\/\/javascript.local\/article\/websocket\/chat\/ws` : \/\/ dev integration with local site\n            `wss:\/\/javascript.info\/article\/websocket\/chat\/ws`; \/\/ prod integration with javascript.info\n    \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442\u043e\u043c\n    let socket = new WebSocket(url);\n \n    \/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\n    document.forms.publish.onsubmit = function() {\n        let outgoingMessage = this.message.value;\n \n        socket.send(outgoingMessage);\n        return false;\n    };\n \n    \/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n    socket.onmessage = function(event) {\n        let incomingMessage = event.data;\n        showMessage(incomingMessage);\n    };\n    \/\/\u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043a\u0440\u044b\u0442 \u0441\u043e\u043a\u0435\u0442, \u0442\u043e \u043f\u0438\u0448\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438\n    socket.onclose = event => console.log(`Closed ${event.code}`);\n \n    \/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 div#messages\n    function showMessage(message) {\n        let messageElem = document.createElement('div');\n        messageElem.textContent = message;\n        document.getElementById('messages').prepend(messageElem);\n    }\n&lt;\/script><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">&lt;!<\/span><span style=\"color: #F286C4\">doctype<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">html<\/span><span style=\"color: #F6F6F4\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">&lt;<\/span><span style=\"color: #F286C4\">form<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">name<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">publish<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    &lt;<\/span><span style=\"color: #F286C4\">input<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">type<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">text<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">name<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">message<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">maxlength<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">50<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    &lt;<\/span><span style=\"color: #F286C4\">input<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">type<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">submit<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">value<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">Send<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">&lt;\/<\/span><span style=\"color: #F286C4\">form<\/span><span style=\"color: #F6F6F4\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">&lt;<\/span><span style=\"color: #F286C4\">div<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884; font-style: italic\">id<\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #E7EE98\">messages<\/span><span style=\"color: #DEE492\">&quot;<\/span><span style=\"color: #F6F6F4\">&gt;&lt;\/<\/span><span style=\"color: #F286C4\">div<\/span><span style=\"color: #F6F6F4\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">&lt;<\/span><span style=\"color: #F286C4\">script<\/span><span style=\"color: #F6F6F4\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> url <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> location.host <\/span><span style=\"color: #F286C4\">==<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">localhost<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">ws:\/\/localhost:8080\/ws<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> location.host <\/span><span style=\"color: #F286C4\">==<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">javascript.local<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #E7EE98\">`ws:\/\/javascript.local\/article\/websocket\/chat\/ws`<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">:<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #7B7F8B\">\/\/ dev integration with local site<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">            <\/span><span style=\"color: #E7EE98\">`wss:\/\/javascript.info\/article\/websocket\/chat\/ws`<\/span><span style=\"color: #F6F6F4\">; <\/span><span style=\"color: #7B7F8B\">\/\/ prod integration with javascript.info<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442\u043e\u043c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> socket <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4; font-weight: bold\">new<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">WebSocket<\/span><span style=\"color: #F6F6F4\">(url);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    document.forms.publish.<\/span><span style=\"color: #62E884\">onsubmit<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> outgoingMessage <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE; font-style: italic\">this<\/span><span style=\"color: #F6F6F4\">.message.value;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        socket.<\/span><span style=\"color: #62E884\">send<\/span><span style=\"color: #F6F6F4\">(outgoingMessage);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">return<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #BF9EEE\">false<\/span><span style=\"color: #F6F6F4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    socket.<\/span><span style=\"color: #62E884\">onmessage<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">event<\/span><span style=\"color: #F6F6F4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> incomingMessage <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> event.data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #62E884\">showMessage<\/span><span style=\"color: #F6F6F4\">(incomingMessage);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/\u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043a\u0440\u044b\u0442 \u0441\u043e\u043a\u0435\u0442, \u0442\u043e \u043f\u0438\u0448\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    socket.<\/span><span style=\"color: #62E884\">onclose<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">event<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=&gt;<\/span><span style=\"color: #F6F6F4\"> console.<\/span><span style=\"color: #62E884\">log<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #E7EE98\">`Closed <\/span><span style=\"color: #F286C4\">${<\/span><span style=\"color: #F6F6F4\">event.code<\/span><span style=\"color: #F286C4\">}<\/span><span style=\"color: #E7EE98\">`<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #7B7F8B\">\/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 div#messages<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    <\/span><span style=\"color: #F286C4\">function<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">showMessage<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">message<\/span><span style=\"color: #F6F6F4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        <\/span><span style=\"color: #F286C4\">let<\/span><span style=\"color: #F6F6F4\"> messageElem <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> document.<\/span><span style=\"color: #62E884\">createElement<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">div<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        messageElem.textContent <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> message;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">        document.<\/span><span style=\"color: #62E884\">getElementById<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">messages<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">).<\/span><span style=\"color: #62E884\">prepend<\/span><span style=\"color: #F6F6F4\">(messageElem);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">&lt;\/<\/span><span style=\"color: #F286C4\">script<\/span><span style=\"color: #F6F6F4\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>P\u00e4rast k\u00f5ik me avame index.html fail brauseris ja sisestame terminalis <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>node index.js<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F6F6F4\">node index.js<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Ja avame &#8220;localhost:8080&#8221;<\/p>\n\n\n\n<p>ning n\u00e4eme j\u00e4rgmine<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B-1024x551.png\" alt=\"\" class=\"wp-image-1943\" srcset=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B-1024x551.png 1024w, https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B-300x161.png 300w, https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B-768x413.png 768w, https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B-150x81.png 150w, https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B-1536x826.png 1536w, https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/331E0DB2-EBD1-4C5A-A7F1-F80080C1F99B.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>N\u00fc\u00fcd me saame saada kirjused brauseris  <\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avame Terminal&#8217;i ja sisestame j\u00e4rgmiseid P\u00e4rast k\u00f5ik me loome &#8220;index.js&#8221; ja sisestame sinna j\u00e4rgmine kood P\u00e4rast seda loomine &#8220;index.html&#8221; ja sisestame sinna j\u00e4rgmine kood P\u00e4rast k\u00f5ik me avame index.html fail brauseris ja sisestame terminalis Ja avame &#8220;localhost:8080&#8221; ning n\u00e4eme j\u00e4rgmine N\u00fc\u00fcd me saame saada kirjused brauseris<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1942","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/pages\/1942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/comments?post=1942"}],"version-history":[{"count":1,"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/pages\/1942\/revisions"}],"predecessor-version":[{"id":1944,"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/pages\/1942\/revisions\/1944"}],"wp:attachment":[{"href":"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-json\/wp\/v2\/media?parent=1942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}