Тест nodejs websocket возвращает ошибку о кодировке - PullRequest
0 голосов
/ 17 июня 2019

Я пробую свои силы в 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.Теперь код работает, и я вижу, как он создает веб-сокет.Больше никаких ошибок по поводу кодирования.Я все еще хотел бы знать, как запустить клиент и сервер с моего веб-хоста.

1 Ответ

0 голосов
/ 18 июня 2019

Добавьте <meta http-equiv="content-type" content="text/html; charset=utf-8" /> внутри тега заголовка, и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...