公司即将要使用socket技术, 自己在个人项目先使用一个socket.io来试试手.
首先想到要用socket实现一个什么样的功能呢?
-> 类似于有新的用户阅读了博客, 使用socket推送到前端. 相当于新点赞以及新回复的功能. -> 有了想法说干就干
- Koa2 框架中集成socket服务的支持.
// 安装 socket.io, ts项目需要安装类型声明 @types/socket.io
// 在app.ts 后台服务启动文件中引入socket.io 以及http模块
import io form 'socket.io'
import http from 'http'
const app = new Koa() // koa 实例
//```` 省略各种中间件逻辑
在最后 需要用http模块来创建一个服务而不是像之前使用koa实例创建的服务
const server = http.createServer(app.callback())
// 建立socket服务 这里为什么要把 socketServer export出去? 是为了日后方便在其他服务中调用socket服务推送消息
export const socketServer = io(server)
// 服务监听socket连接
socketServer.on('connection',(socket) => {
// 前端建立了连接后要做什么逻辑
// socket.emit() 是像这个连接进来的socket 发送一个名字为message 的事件,并且附带一个对象{message:"Hello world"} 消息
socket.emit('message',{message:"Hello world"})
})
socket.on("receive",(info) => {
// socket.on方法,服务端监听客户端emit的事件,事件名字为 "receive", 并且接收客户端发送过来的信息
})
}
- 根据这个例子,实现一个逻辑: 当客户端一旦有连接进来, 向客户端emit一个visit_count 事件, 并且传送一个访问量数字
- 具体实现
socketServer.on('connection',async (socket) => {
const blogs = await blog.find();
const totalNewVisited = blogs.map(blog => {
return blog.new_visited
}).filter(Boolean).length
socket.emit('visit_count',{count:totalNewVisited})
}