示例3 聊天室升级版 
客户端 
html
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible"
          content="IE=edge">
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0">
    <title>WebSocket Demo</title>
</head>
<body>
    <input type="text">
    <button>发送</button>
    <div id="content"></div>
    <script>
        // 消息类型枚举
        const message_type = {
            OPEN: 'open',
            CLOSE: 'close',
            MESSAGE: 'message',
        };
        var input = document.querySelector('input');
        input.addEventListener('keydown', function (e) {
            // 回车键
            if (e.keyCode == 13) {
                sendMessage();
            }
        })
        // 创建一个 WebSocket 对象
        var socket = new WebSocket('ws://127.0.0.1:8080');
        // 连接成功
        socket.onopen = function () {
            console.log('连接成功');
        }
        // 接收消息
        socket.onmessage = function (res) {
            console.log(res.data);
            let data = JSON.parse(res.data);
            let div = document.createElement('div');
            div.innerHTML = `${data.message} -- ${data.time}`;
            if (data.type === message_type.MESSAGE) {
                div.style.color = 'blue';
            } else if (data.type === message_type.CLOSE) {
                div.style.color = 'red';
            } else if (data.type === message_type.OPEN) {
                div.style.color = 'green';
            }
            document.getElementById('content').appendChild(div);
        }
        // 接收消息
        socket.onclose = function (res) {
            let div = document.createElement('div');
            div.innerHTML = '服务器断开连接';
            document.getElementById('content').appendChild(div);
        }
        // 发送消息
        function sendMessage() {
            socket.send(input.value);
            input.value = '';
        }
        document.querySelector('button').onclick = function () {
            sendMessage();
        }
    </script>
</body>
</html>服务端 
js
// server.js
const ws = require('nodejs-websocket');
var dayjs = require("dayjs");
// 消息类型枚举
const message_type = {
  OPEN: 'open',
  CLOSE: 'close',
  MESSAGE: 'message',
};
// 端口号
const PORT = 8080;
// 所有用户数
var count = 0;
function getTime(){
    return dayjs().format('HH:mm');
}
// 监听事件
var server = ws.createServer(function (conn) {
  console.log('New connection');
  count++;
  conn.user_name = '用户' + count;
  broadcast({
    type: message_type.OPEN,
    message: conn.user_name + '加入了聊天室',
    time: getTime(),
  });
  // 接收客户端发送的数据
  conn.on('text', function (data) {
    console.log('Received ' + data);
    // conn.sendText(data)
    broadcast({
      type: message_type.MESSAGE,
      message: conn.user_name + ':' + data,
      time: getTime(),
    });
  });
  // 客户端断开
  conn.on('close', function (code, reason) {
    console.log('Connection closed');
    let message = conn.user_name + '离开了聊天室';
    broadcast({
        type: message_type.CLOSE,
        message: message,
        time: getTime(),
      });
  });
  // 客户端异常
  conn.on('error', function (err) {
    console.log('异常');
  });
});
// 广播给所有用户
function broadcast(data) {
  server.connections.forEach(function (conn) {
    conn.sendText(JSON.stringify(data));
  });
}
// 启动服务
server.listen(PORT, () => {
  console.log(`Server started on port ${PORT}`);
});