📅  最后修改于: 2023-12-03 15:41:08.985000             🧑  作者: Mango
Socket.IO 是一个在实时 Web 应用程序中使用的 JavaScript 库,它使服务器和客户端之间的双向通信变得容易。本文将介绍如何使用 Socket.IO 快速创建一个简单的聊天室。
在此之前,您需要先在本地安装 Node.js 和 npm。
首先,通过运行以下命令在本地创建一个新的应用程序目录:
mkdir socket-io-chat
cd socket-io-chat
npm init -y
然后,使用以下命令安装所需的依赖项:
npm install express socket.io
在项目目录下创建一个名为 server.js 的文件。
首先,引入必要的模块:
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
其中,express 是一个 Web 应用框架,http 用于创建服务器,socket.io 用于实现实时双向通信。
然后,配置服务器以便向客户端提供静态文件:
app.use(express.static(__dirname + '/public'));
创建一个 get 路由,“/”将渲染聊天室的 HTML 页面:
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
最后,在服务器上监听来自客户端的连接,可以将其视为创建了一个“房间”,在该房间中所有已连接的客户端都可以相互通信:
io.on('connection', function(socket){
console.log('a user connected');
socket.on('disconnect', function(){
console.log('user disconnected');
});
});
现在,您的服务器应该已经准备好了。让我们测试它并开始创建聊天室的前端。
在项目目录下创建一个名为 public 的目录,其中包含三个文件:index.html,style.css 和 main.js。
定义聊天室的基本结构,引入必要的文件,包括 Socket.IO 的客户端库:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Socket.IO Chat Room</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Socket.IO Chat Room</h1>
<div id="messages"></div>
<form id="message-form">
<input type="text" id="message-input" autocomplete="off">
<button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script src="main.js"></script>
</body>
</html>
其中,id 为 messages 的 div 元素用于显示聊天记录,id 为 message-form 的 form 元素用于用户输入和发送聊天消息。客户端还需要连接到 Socket.IO 服务器,因此需要引入 socket.io.js 文件,以及在后面的 main.js 文件中使用的客户端 Socket.IO 实例。
定义聊天室的基本样式:
body {
font-family: sans-serif;
}
h1 {
text-align: center;
}
#messages {
border: 1px solid black;
height: 500px;
margin-bottom: 10px;
overflow-y: scroll;
padding: 10px;
}
#message-form input[type=text] {
width: 80%;
}
#message-form button {
width: 18%;
}
现在,我们可以处理客户端代码。首先,创建 Socket.IO 的客户端实例,并使用它连接到服务器:
const socket = io();
然后,处理消息发送表单的提交事件,向服务器发送新消息的文本:
const messageInput = document.getElementById('message-input');
const messageForm = document.getElementById('message-form');
messageForm.addEventListener('submit', function(event) {
event.preventDefault();
const messageText = messageInput.value.trim();
if (messageText === '') {
return;
}
socket.emit('new-message', messageText);
messageInput.value = '';
});
最后,监听来自服务器的新消息,并将其添加到消息记录中:
const messages = document.getElementById('messages');
socket.on('new-message', function(messageText) {
const messageElement = document.createElement('div');
messageElement.innerText = messageText;
messages.appendChild(messageElement);
});
现在,您可以运行服务器并测试聊天室,通过运行以下命令启动服务器:
node server.js
然后在浏览器中打开 http://localhost:3000。当您向聊天室发送消息时,其他连接到聊天室的用户将能够看到新的消息。
示例代码可在 GitHub 上进行查看和下载。
参考文献: