主要是通过简易聊天室熟练掌握 stock.io 相关方法和运行的过程。
stock.io
在进行实现简易实时聊天室之前,我们先梳理一下我们需要的功能和流程。
所需功能:
系统开发流程:
<div id="message_box">div>
<form id="send_box">
<input type="text" id="message_input" />
<button type="submit" id="send_button">发送button>
form>
安装命令 npm install socket.io
const io = require("socket.io")(3000);
当我们创建了 socket.io 的服务后,我们还需要创建 io 连接后才能向客户端发送消息和定义消息监听。创建连接的具体代码如下:
io.on("connection", (socket) => {});
创建好 socket.io 连接后,我们就可以自定义客户端发送消息的监听事件,并且接收到消息后我们可以使用broadcast.emit
方法来发送消息给。具体的代码如下:
/**
* 服务端创建名为send-chat-message的消息监听
* 客户端接收chat-message类的消息
*/
socket.on("send-chat-message", (message) => {
console.log(message);
socket.broadcast.emit("chat-message", message); // 发送消息给客户端
});
搭建 socketio 的客户端只要引入对应的依赖文件和连接对应的 socketio 服务就可以,具体的代码如下:
<script defer src="http://localhost:3000/socket.io/socket.io.js">script>
const socket = io("http://localhost:3000"); // 与socketio服务端进行连接
socket.emit("send-chat-message", message); // 向socket.io服务器发送消息
socket.emit("new-user", useName); // 客户端发送姓名到执行的socketio接收器中
// 监听客户端发送过来的new-user类的消息
socket.on("new-user", (name) => {
users[socket.id] = name;
socket.broadcast.emit("user-connected", name);
});
const socket = io("http://localhost:3000");
const useName = prompt("您的姓名是:");
appendMessage("你已经加入聊天系统");
socket.emit("new-user", useName);
socket.on("chat-message", (data) => {
appendMessage(`用户${data.name}说了: ${data.message}`);
});
socket.on("user-connected", (data) => {
appendMessage(`${data} 已连接`);
});
socket.on("user-disconnected", (data) => {
appendMessage(`${data} 已下线`);
});
messageForm.addEventListener("submit", (e) => {
e.preventDefault();
const message = messageInput.value;
appendMessage(`您发了:${message}`);
socket.emit("send-chat-message", message); // 向socket.io服务器发送消息
messageInput.value = "";
});
const io = require("socket.io")(3000);
io.on("connection", (socket) => {
socket.on("new-user", (name) => {
users[socket.id] = name;
socket.broadcast.emit("user-connected", name);
});
socket.on("send-chat-message", (message) => {
socket.broadcast.emit("chat-message", {
message: message,
name: users[socket.id],
});
});
socket.on("disconnect", () => {
socket.broadcast.emit("user-disconnected", users[socket.id]);
delete users[socket.id];
});
});
完整代码示例下载