我正在尝试使用nodejs和websockets。我有一些侦听端口8000的简单服务器逻辑。当有请求进入时,我尝试创建一个websocket。
然后我有一个客户端...通过ws协议侦听端口8000。
正在做什么
当我启动服务器页面... myservername.com:8000时,它会正确显示“我已连接”
什么不起作用
当我尝试运行客户端(html文件)时,似乎没有任何效果。 我尝试像这样启动:myservername.com:8000/justWs.html,我看到以下行为:
未声明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上同时运行客户端和服务器。
答案 0 :(得分:0)
在标头标记中添加<meta http-equiv="content-type" content="text/html; charset=utf-8" />
,它将起作用。