无法从JavaScript客户端通过https连接到websocket服务器
我已经使用以下代码为我的webrtc应用程序创建了websocket服务器无法从JavaScript客户端通过https连接到websocket服务器,javascript,node.js,websocket,webrtc,Javascript,Node.js,Websocket,Webrtc,我已经使用以下代码为我的webrtc应用程序创建了websocket服务器 const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('C:/.../key_store.key'), cert: fs.readFileSync('C:/.../key_store.crt') }; var server = https.createServe
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('C:/.../key_store.key'),
cert: fs.readFileSync('C:/.../key_store.crt')
};
var server = https.createServer(options, (req, res) => { res.writeHead(200); res.end('hello world\n');}).listen(9090);
//require our websocket library
var WebSocketServer = require('ws').Server;
//creating a websocket server at port 9090
var wss = new WebSocketServer({server});
我的websocket客户端代码是:
conn = new WebSocket('ws://localhost:9090');
当我尝试使用上述代码连接到websocket服务器时,JavaScript控制台中出现以下异常:
VM908:35到“ws://localhost:9090/”的WebSocket连接失败:在收到握手响应之前连接已关闭
我尝试在chrome中导入证书,但没有成功。尝试将代码更改为类似以下内容
const https = require('https');
const fs = require('fs');
const options = {
key : fs.readFileSync('C:/.../key_store.key'),
cert : fs.readFileSync('C:/.../key_store.crt')
};
var server = https.createServer(options).listen(9090);
//require our websocket library
var WebSocketServer = require('ws').Server;
//creating a websocket server at port 9090
var wss = new WebSocketServer({server});
// wait for connection to be established
wss.on('connection', (ws, req) => {
// send some message
ws.send('hello world\n');
// close connection
ws.close();
});
WebRTC需要https,https页面仅允许安全的Wecsockets(wss)连接 因此,您需要在客户端创建WebSocket,如下所示
conn = new WebSocket("wss://your_server_ip:wss_port/");
In your case:
conn = new WebSocket("wss://139.126.123.18:9090/");
我认为您正在WebSocket服务器中使用自签名SSL证书(key_store.crt/.key)。在这种情况下,浏览器将为这些连接引发
ERR\u unsecure\u响应
异常。因此,我们通过在浏览器中访问该url手动添加异常,如下所示 打开
https://139.126.123.18:9090/
在新选项卡中,然后单击高级->继续(对于Chrome) 或者,您可以将自签名CA导出到浏览器
现在,您的安全WebSocket应该已连接 您是否尝试过使用
wss://
而不是ws://
?我尝试过,但遇到另一个错误“WebSocket连接到”wss://139.126.123.18:9090/'失败:连接建立中出错:net::ERR_unsecure_RESPONSE'仍然没有更改相同的错误“到'ws://localhost:9090/'的WebSocket连接失败:在收到握手响应之前连接已关闭”@user1188867您是否检查了您的证书是否正常?我在客户端使用了wss并使用https保留WebSocket服务器,但它仍然给我NavigatorUserMediaError{name:“PermissionDeniedError”,消息:“只允许使用安全来源。”。,constraintName:}您的网页url应为https。在错误日志中打印window.location。