返回

用Node.js + Socket.IO搭建一对一即时聊天室

前端

前言

在现代互联网应用中,即时聊天功能已经成为不可或缺的一部分。无论是社交网络、游戏、还是企业内部沟通,实时聊天都可以帮助人们快速、高效地交流信息。实现一对一即时聊天应用,重要的一点就是消息能够实时的传递,一种方案就是熟知的使用 Websocket 协议,本文中我们使用 Node.js 中的一个框架 Socket.io 来实现。

搭建聊天室的前端页面

首先,我们先来搭建聊天室的前端页面,这里我们将使用HTML、CSS和JavaScript来实现。

<!DOCTYPE html>
<html>
<head>
  
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
    <div class="chat-window">
      <ul class="messages"></ul>
      <form id="chat-form">
        <input type="text" id="chat-input" placeholder="Enter your message">
        <button type="submit">Send</button>
      </form>
    </div>
  </div>

  <script src="socket.io.js"></script>
  <script src="script.js"></script>
</body>
</html>
.container {
  width: 100%;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.chat-window {
  width: 300px;
  height: 400px;
  border: 1px solid black;
  padding: 20px;
}

.messages {
  list-style-type: none;
  padding: 0;
}

.message {
  margin-bottom: 10px;
}

.sender {
  color: blue;
}

.receiver {
  color: green;
}

#chat-form {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

#chat-input {
  width: 200px;
  padding: 5px;
  margin-right: 10px;
}

#chat-button {
  padding: 5px;
}
// 获取聊天窗口和输入框元素
const chatWindow = document.querySelector('.chat-window');
const chatInput = document.querySelector('#chat-input');

// 创建一个 Socket.IO 实例
const socket = io();

// 监听服务器发送的消息
socket.on('message', (data) => {
  // 创建一个新的消息元素
  const message = document.createElement('li');
  message.classList.add('message');

  // 根据发送者和接收者设置消息样式
  if (data.sender === 'server') {
    message.classList.add('sender');
  } else {
    message.classList.add('receiver');
  }

  // 将消息内容添加到元素中
  message.innerHTML = data.message;

  // 将消息元素添加到聊天窗口中
  chatWindow.appendChild(message);
});

// 监听聊天表单的提交事件
document.querySelector('#chat-form').addEventListener('submit', (e) => {
  e.preventDefault();

  // 获取输入框中的消息内容
  const message = chatInput.value;

  // 将消息发送给服务器
  socket.emit('message', message);

  // 清空输入框
  chatInput.value = '';
});

搭建聊天室的后端服务

接下来,我们来搭建聊天室的后端服务,这里我们将使用Node.js和Socket.IO来实现。

// 引入必要的模块
const express = require('express');
const socketIO = require('socket.io');

// 创建一个 Express 应用
const app = express();

// 设置静态文件目录
app.use(express.static('public'));

// 启动服务器
const server = app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

// 创建一个 Socket.IO 实例
const io = socketIO(server);

// 监听客户端的连接
io.on('connection', (socket) => {
  console.log('A new client connected');

  // 监听客户端发送的消息
  socket.on('message', (data) => {
    // 将消息发送给所有客户端
    io.emit('message', { sender: 'server', message: data });
  });

  // 监听客户端的断开连接
  socket.on('disconnect', () => {
    console.log('A client disconnected');
  });
});

运行聊天室

最后,我们可以通过以下命令来运行聊天室:

node server.js

然后,在浏览器中打开 http://localhost:3000 就可以看到聊天室的页面了。

结语

通过本文,我们学习了如何使用 Node.js 和 Socket.IO 搭建一个一对一即时聊天室。希望本教程对您有所帮助。