После долгих исследований наконец я нашел это решение и работает для меня так, как мне было нужно. Это мой сервер. js файл.
/**
Before running:
> npm install ws
Then:
> node server.js
> open http://localhost:8080 in the browser
*/
const http = require('http');
const fs = require('fs');
const ws = new require('ws');
//for wss
const https = require('https');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
const wss = new ws.Server({noServer: true});
const clients = new Set();
function accept(req, res) {
if (req.url == '/ws' && req.headers.upgrade &&
req.headers.upgrade.toLowerCase() == 'websocket' &&
// can be Connection: keep-alive, Upgrade
req.headers.connection.match(/\bupgrade\b/i)) {
wss.handleUpgrade(req, req.socket, Buffer.alloc(0), onSocketConnect);
} else if (req.url == '/') { // index.html
fs.createReadStream('./index.html').pipe(res);
} else { // page not found
res.writeHead(404);
res.end();
}
}
function onSocketConnect(ws) {
clients.add(ws);
log(`new connection`);
ws.on('message', function(message) {
log(`message received: ${message}`);
message = message.slice(0, 500); // max message length will be 50
for(let client of clients) {
client.send(message);
}
});
ws.on('close', function() {
log(`connection closed`);
clients.delete(ws);
});
}
let log;
if (!module.parent) {
log = console.log;
// for wss
https.createServer(options,accept).listen(8443);
http.createServer(accept).listen(8080);
} else {
// to embed into javascript.info
log = function() {};
// log = console.log;
exports.accept = accept;
}
Теперь ссылки WS и WSS будут запускаться из одного файла. Для порта WSS будет 8443, а для WS 8080 - другая ссылка останется прежней. Для WSS необходимы
ключ: fs.readFileSyn c ('key.pem'),
сертификат: fs.readFileSyn c ('cert.pem')
и вот справка для генерации этих файлов
// как получить файл pem из ключа и crt- файлы
Как получить файл .pem из файлов .key и .crt?
openssl rsa -inform DER -outform PEM -in server.key -out server. crt.pem
Дайте мне знать, если возникнет какая-либо проблема.