# 示例3 聊天室升级版
## 客户端
```html
WebSocket Demo
```
## 服务端
```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}`);
});
```