所以我正在尝试建立一个网站,该网站也有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浏览器中加载服务器网站,我会收到"你好,世界!"。到目前为止还不错。但如果我打开网络控制台并尝试连接
var exampleSocket = new WebSocket("ws://192.10.10.30:8080");
我收到以下错误消息:
到"ws://192.10.10.30:8080/"的WebSocket连接失败:错误在WebSocket握手期间:意外的响应代码:200
我的第一个想法是,我必须显式声明http服务器吗?
但我读过这篇文章在Node.js上为WebSocket和HTTP服务器提供相同地址的服务,并且并没有明确声明HTTP服务器。请帮我一下。
您正在传递一个Express应用程序实例作为server
,它应该是HTTP/HTTPS服务器实例。这样的实例由app.listen
:返回
var app = express();
var server = app.listen(8080, function(){
console.log('app started');
});
wss = new WebSocket.Server({server : server});
我在Windows计算机上遇到此问题,发现原因是IIS没有打开WebSocket协议。请确保计算机上的IIS支持WebSocket:控制面板->程序和功能->打开或关闭Windows功能。展开Internet Information Services,展开World Wide Web Services,展开Application Development Features,然后确保选中WebSocket Protocol。