因此,我正在尝试建立一个也具有websocket的网站,其中http服务器和websocket都在同一端口上侦听:
const WebSocket = require('ws');
var express = require('express');
var app = express();
wss = new WebSocket.Server({server : app});
app.get('/', function(req, res){
res.send('hello world!');
});
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('some text');
});
app.listen(8080, function(){
console.log('app started');
});
如果我随后在chrome浏览器中加载服务器网站,我会被打招呼:“ hello world!”。到目前为止,一切都很好。但是,如果我打开网络控制台并尝试与之连接
var exampleSocket = new WebSocket("ws://192.10.10.30:8080");
我收到以下错误消息:
与'ws://192.10.10.30:8080 /'的WebSocket连接失败:错误 WebSocket握手期间:意外的响应代码:200
我的第一个想法是,我必须显式声明一个http服务器吗?
但是我读了这篇文章 Serve WebSocket and HTTP server at same address on Node.js,并且没有明确声明http服务器。请帮我。
答案 0 :(得分:1)
您要以server
的形式传递Express应用程序实例,该实例应该是HTTP / HTTPS服务器实例。这样的实例由app.listen
返回:
var app = express();
var server = app.listen(8080, function(){
console.log('app started');
});
wss = new WebSocket.Server({server : server});
答案 1 :(得分:0)
我在 Windows 机器上遇到了这个问题,发现原因是 IIS 没有打开 WebSocket 协议。确保机器上的 IIS 支持 WebSocket: 控制面板 -> 程序和功能 -> 打开或关闭 Windows 功能。 展开 Internet 信息服务、展开万维网服务、展开应用程序开发功能,然后确保选中 WebSocket 协议。