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 клиент отключается и сервер останавливается.