使用Socket.io实现实时更新聊天记录

1.先了解什么是WebSocket

WebSocket 连接本质上就是一个 TCP 连接,WebSocket会通过http请求建立,建立后的WebSocket会在客户端和服务器端建立一个持久的连接,直到有一方主动的关闭了该连接。所以现在服务器就知道有哪些用户正在连接了,这样通讯就变得相对容易了。

2.Socket,io

Socket.io实际上是WebSocket的父集,Socket.io封装了WebSocket和轮询等方法,他会根据情况选择方法来进行通讯。

二.demo操作如下

1.创建一个文件夹后终端打开

初始化

npm init -y

安装express和socket,io

cnpm install --save express socket.io

2.然后新建一个public/01.html和app.js的文件

使用Socket.io实现实时更新聊天记录
01.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>群聊</title>
</head>
<body>
<h1>群聊</h1>
<div style="width: 30%; float: left">
    输入:<input type="text" id="msginput">
    <button id="msgbtn">发送</button>
</div>
<div style="width: 65%; float: right" id="showbox">
 
</div>
</body>
<script src="/socket.io/socket.io.js">
// 这个script标签访问数据就相当访问了127.0.0.1:3000/socket.io/socket.io.js,浏览器打开其实就是socket.io插件源码
</script>
<script>
    let socket = io.connect('http://localhost:3000');
    let btn = document.getElementById('msgbtn');
    let msginput = document.getElementById('msginput');
    let showbox = document.getElementById('showbox');
    btn.addEventListener('click', (event) => {
        let msg = msginput.value;
        let data = {msg: msg};
        socket.emit('sendMessage', data);
    });
    socket.on('receiveMessage', (data) => {
        console.log('收到');
        console.log(data);
        
        let message = document.createElement('div');
        message.innerHTML = `收到的新消息是: ${data.msg}`;
        showbox.appendChild(message);
    })
</script>
 
</html>

介绍:
io,connect: 这里面的路径实际上代表的是命名空间,这里是默认的命名空间“/”,如果URL是“http://localhost/abc"那就代表http请求连接到localhost下的abc命名空间中,如果不理解暂时当公式记住,到命名空间那一节再详细讲解。

socket,on:这个会jquery和node的应该就能猜出来了,这就是一个注册事件的api,实际上,我们通过socket.io进行通讯主要就是操作各种事件,这里注册了一个叫”new“的事件,服务器可以触发来实现客户端与服务器的交互。

在app.js里,操作如下


// 服务器端
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
 
server.listen(3000, () => {
    console.log('server running at 127.0.0.1:3000');
});
 
app.use(express.static('./public'));
 
/*   socket.io 逻辑     */
 
io.on('connection', (socket) => {
    socket.on('sendMessage', (data) => {
        data.id = socket.id;
        io.emit('receiveMessage', data);
    })
}
)

3.在终端中运行app.js,开启服务器

使用Socket.io实现实时更新聊天记录

4.在服务器模式下浏览,在不同的窗口输入内容,另一个窗口数据自动会发生变化

使用Socket.io实现实时更新聊天记录
这样就实现了双向通信啦

总结:这样使用Socket.io轻易实现实时更新聊天记录(即不同的窗口实时更新数据)

最终效果如图:
使用Socket.io实现实时更新聊天记录