我使用以下代码为我的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.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控制台中得到了以下异常:
35 908:35连接到'ws://localhost:9090/‘的WebSocket连接失败:连接在收到握手响应之前已关闭
我试着用铬导入证书,但没有成功。
发布于 2017-06-27 16:43:20
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_INSECURE_RESPONSE异常。
因此,我们通过访问浏览器中的url来手动添加异常,如下所示。
在“新”选项卡中打开https://139.126.123.18:9090/,
然后点击高级->继续(对于Chrome)。
也可以将自签名CA导出到浏览器。
现在,您的安全WebSocket应该连接起来。
发布于 2017-06-27 12:27:40
尝试将您的代码更改为以下内容
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();
});https://stackoverflow.com/questions/44779727
复制相似问题