WebSocket (wss) сервер Node JS, клиент JavaScript

Сервер

Для создания сервера необходимо до установить компонент (https://github.com/websockets/ws), если его нет:

# npm install ws

Скрипт сервера:

const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');

const server = https.createServer({
	cert: fs.readFileSync(__dirname + '/ssl/certificate.crt'),
	key: fs.readFileSync(__dirname + '/ssl/private.key'),
	ca: fs.readFileSync(__dirname + '/ssl/ca_bundle.crt')
});
const wss = new WebSocket.Server({ server });

wss.on('connection', function connection(ws) {
	ws.on('message', (function(ws){ return function incoming(message) {
		console.log('received %s', message);
		ws.send(message);
		if(message == 'close'){
			ws.close();
		}else if(message == 'shutdown'){
			ws.close();
			wss.close();
			console.log('Сервер завершен');
			process.exit();
		}
	}})(ws));

	ws.send('Добро пожаловать');
});

server.listen(8080);
console.log('Сервер запущен');

 

Клиент

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WSS Client Test</title>
<script>
var socket = new WebSocket('wss://127.0.0.1:8080');

socket.onopen = function() {
	alert('Соединение установлено.');
}

socket.onclose = function(event) {
	if(event.wasClean){
		alert('Соединение закрыто чисто');
	} else {
		alert('Обрыв соединения'); // например, "убит" процесс сервера
	}
	alert('Код: ' + event.code + ' причина: ' + event.reason);
}

socket.onmessage = function(event) {
	alert('Получены данные ' + event.data);
}

socket.onerror = function(error) {
	alert('Ошибка ' + error.message);
}

function SendMess(){
	var textarea = document.body.querySelectorAll('textarea')[0];
	socket.send(textarea.value);
	textarea.value = '';
}
</script>
</head>
<body>
<textarea></textarea><br>
<button onclick="SendMess();">Отправить</button><br>
<button onclick="socket.close();">Отключится</button>
</body>
</html>

При отправке на сервер команду close клиент отключается, при отправке shutdown клиент отключается и сервер останавливается.