Я пробую свои силы в nodejs и websockets.У меня есть простая серверная логика, которая прослушивает порт 8000. Когда приходит запрос, я пытаюсь создать веб-сокет.
Тогда у меня есть клиент ... который прослушивает порт 8000 по протоколу ws.
Что работает
при запуске страницы сервера... myservername.com:8000 правильно показывает «Я подключен»
Что не работает
Когда я пытаюсь запустить клиентскую часть (html-файл),кажется, ничего не работает.Я пытаюсь запустить так: myservername.com:8000/justWs.html, я вижу следующее поведение:
- на странице отображается сообщение «Я подключен».
- я вижу следующее сообщение об ошибке в консоли в f12:
Кодировка символов HTML-документа не была объявлена.Документ будет отображаться с искаженным текстом в некоторых конфигурациях браузера, если документ содержит символы вне диапазона US-ASCII.Кодировка символов страницы должна быть объявлена в документе или в протоколе передачи.
Код сервера:
Это то, что мой файл justWsServer.jsвыглядит так:
const http = require('http');
//3rd party module, ws
const websocket = require('ws');
//create basic http server
const server = http.createServer((req, res)=>{
//res.header("Content-Type", "text/plain; charset=utf-8");
res.end("I am connected")
});
/*
creating a new websocket server on line 15. NB: per the docs at https://github.com/websockets/ws/blob/master/doc/ws.md#class-websocketserver,
you need to pass it a "pre-created Node.js HTTP/S server. we created that server on line 6
*/
const wss = new websocket.Server({server});
//headers event.
wss.on('headers', (headers, req)=>{
//res.header("Content-Type", "text/plain; charset=utf-8");
console.log(headers);
});
server.listen(8000); // if http traffic shows up on port 8000, we create a server with a request, and a result.
justWs.html
Вот как выглядит клиентская сторона:
<html>
<head>
<meta charset="UTF-8">
</head>
<script>
let ws = new WebSocket('ws://localhost:8000'); //nb no http protocol but web socket protocol.
console.log(ws);
</script>
</html>
Как вы можете видеть нана стороне сервера я играл с типами кодирования.Но я не смог решить мою проблему.
Структура папок
root@server:/var/www/socketiotest# ls -lah
total 28K
drwxr-xr-x 3 root root 4.0K Jun 13 16:57 .
drwxr-xr-x 6 root root 4.0K Jun 13 15:39 ..
-rw-r--r-- 1 root root 194 Jun 17 10:06 justWs.html
-rw-r--r-- 1 root root 802 Jun 17 09:27 justWsServer.js
drwxr-xr-x 4 root root 4.0K Jun 13 15:59 node_modules
-rw-r--r-- 1 root root 672 Jun 13 15:59 package-lock.json
-rw-r--r-- 1 root root 253 Jun 13 15:59 package.json
Любые советы приветствуются.Спасибо.
РЕДАКТИРОВАТЬ 1
Я думаю, что нашел часть проблемы.Как вы видели из моего поста, на виртуальной машине моего веб-хоста жил и файл client (html), и файл server (justWsServer.js).Я пытался инициировать создание веб-сокета между ними, запустив HTML следующим образом:
http://myserver.com:8000/justWs.html
Я скопировал файл HTML на свой локальный ноутбук, где япрограммирование.Изменено
ws://localhost:8000
на
ws://myserver.com:8000
А потом я просто открыл его в Chrome.Теперь код работает, и я вижу, как он создает веб-сокет.Больше никаких ошибок по поводу кодирования.Я все еще хотел бы знать, как запустить клиент и сервер с моего веб-хоста.