我无法将我的ws连接转换为wss。我的代码上运行了两种类型的服务器。首先,我保留一个检索实时数据包的网络服务器。然后,当客户端希望查看此数据时,我有一个Web套接字服务器将其发送给它们。
我的代码如下:
var net = require("net");
var https = require("https");
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({
ssl: true,
port: 8082,
ssl_key: fs.readFileSync('key.pem'),
ssl_cert: fs.readFileSync('cert.pem')
});
var servercsv = net.createServer();
servercsv.listen(9001);
servercsv.on('connection', function(socket){
fetchlivedata();
});
wss.on('connection', function(ws){
ws.on('message', function(message){
ws.send(thelivedata());
});
});
为了测试这个,我有这个模拟客户端页面,其编写如下:
<p id="muscovy"></p>
<script>
var muscovy = document.getElementById('muscovy');
var ws = new WebSocket('ws://localhost:8082');
var wes = new WebSocket('wss://mywebsite.com:8082');
// event emmited when connected
wes.onopen = function (){
// sending a send event to websocket server
wes.send("Beans");
}
// event emmited when receiving message
wes.onmessage = function(ev){
//let musco = JSON.parse(ev.data);//
//muscovy.textContent = musco[0][1];//
let misho = ev.data;
}
</script>
当我运行此测试时,我收到以下错误:
Error in connection establishment: net::ERR_CONNECTION_REFUSED
问题很可能是我的ssl证书的实施。
我还应该指出,我通过将原始证书(crt
)转换为pem来遵循其他人的建议。我通过更改扩展名来完成此操作。我被告知,因为我的证书的文本以---Begin etc---
开头,所以可以通过这样做将其重新格式化为pem。
很高兴知道这是不正确的。我倾向于相信我的网络套接字服务器代码是这里的问题。
编辑:
我还想提一下,我的代码适用于常规的Web套接字。如果我喜欢的话:
var wss = new WebSocketServer({
port: 8082
});
var servercsv = net.createServer();
servercsv.listen(9001);
然后一切都按预期工作。但仅限于非https环境。