nodejs websocket测试返回有关编码的错误

时间:2019-06-17 14:17:59

标签: node.js websocket

我正在尝试使用nodejs和websockets。我有一些侦听端口8000的简单服务器逻辑。当有请求进入时,我尝试创建一个websocket。

然后我有一个客户端...通过ws协议侦听端口8000。

正在做什么

当我启动服务器页面... 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

我认为我找到了问题的一部分。从我的帖子中可以看到,“客户端”(html文件)和服务器(justWsServer.js)文件都位于我的Web主机的VM上。 我试图通过像这样启动html来触发两者之间的Web套接字的创建:

http://myserver.com:8000/justWs.html

我将HTML文件复制到我正在编程的本地笔记本电脑中。更改

 ws://localhost:8000

 ws://myserver.com:8000

然后我用chrome打开了它。现在代码正在运行,我可以看到它正在创建Web套接字。关于编码也没有更多错误。 我仍然想知道如何从Webhost上同时运行客户端和服务器。

1 个答案:

答案 0 :(得分:0)

在标头标记中添加<meta http-equiv="content-type" content="text/html; charset=utf-8" />,它将起作用。