Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从JavaScript客户端通过https连接到websocket服务器_Javascript_Node.js_Websocket_Webrtc - Fatal编程技术网

无法从JavaScript客户端通过https连接到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

我已经使用以下代码为我的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控制台中出现以下异常:

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。