我使用以下代码为我的webrtc app创建了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控制台中收到以下异常:
VM908:35 WebSocket连接到' ws:// localhost:9090 /'失败:在收到握手响应之前关闭连接
我尝试在chrome中导入证书但没有成功。
答案 0 :(得分:1)
WebRTC要求https和https页面仅允许Secure 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/
,
然后点击Advanced - >继续(对于Chrome)。
或者您可以将自签名CA导出到浏览器。
现在您的Secure WebSocket应该已连接。
答案 1 :(得分:0)
尝试将代码更改为此类
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();
});