前言
前端技术日新月异,当前最火热的前端技术当属微信小程序,而实时技术也成为了越来越多前端工程师关注的方向。本文将介绍如何使用微信小程序和 Server-sent Events(SSE) 构建实时聊天应用的具体实现方式。
SSE 简介
Server-sent Events(SSE)是一项HTML5技术,是基于 HTTP/1.1 协议的服务器推送技术。它允许服务器端向已连接的客户端实时地推送事件,而无需客户端发起请求。
SSE 的实现需要三个步骤:
- 客户端向服务端发起 SSE 连接请求;
- 服务端返回数据,并保持连接;
- 服务端周期性地向客户端推送数据。
微信小程序简介
微信小程序是一种不需要下载安装即可使用的应用,它的开发生态已经越来越完整。小程序可以应用于生活、娱乐、购物等方面。
微信小程序每一个页面是一个 wxml 文件,其中可以嵌入 JavaScript 代码段,用于编写逻辑。数据绑定是其中的重要特性,可以更简单地实现操作 DOM。
实现实时聊天应用
前端实现
创建页面
在微信小程序中新建页面后,可以对应的生成对应的 wxml 和 js 文件,可以在 wxml 中设计页面布局,js 中进行交互逻辑。
发起 SSE 连接请求
// SSE 连接 const evtSource = new EventSource('http://localhost:8080/sse');
在小程序中发起 SSE 连接需要使用 JavaScript 中的 EventSource 对象,接口参数为 SSE 接口地址。
接收 SSE 推送的数据
evtSource.onmessage = e => { // e.data 包含 SSE 推送的数据 const data = JSON.parse(e.data); console.log(data); // 聊天界面新增内容 this.setData({ msgList: this.data.msgList.concat(data.text) }); };
在小程序中接收 SSE 推送的数据需要监听 EventSource 对象的 onmessage 事件,每次接收到服务端推送的数据时触发该事件。
发送数据
const data = { text: this.data.inputValue, userInfo: { avatarUrl: '', nickName: '用户1' } }; wx.request({ url: 'http://localhost:8080/api/sendMsg', method: 'POST', data, success: res => { // 发送成功后清空输入框 this.setData({ inputValue: '' }); }, fail() { wx.showToast({ title: '发送失败,请稍后重试', icon: 'none' }); } });
在小程序中发送数据可以使用微信官方提供的 request 方法进行 post 请求。
服务端实现
服务端使用 Express.js 框架,并使用 express-sse 库实现 SSE 接口的开发。
安装 express 和 express-sse
npm install express express-sse
定义 SSE 接口
// 创建 SSE 接口 app.get('/sse', (req, res) => { // 设置响应头,Content-Type为text/event-stream,表明这是一个SSE响应 res.setHeader('Content-type', 'text/event-stream'); res.setHeader('access-control-allow-origin', '*'); res.flushHeaders(); // 发送数据 setInterval(() => { res.write('data: ' + JSON.stringify({ text: 'hello' }) + '\n\n'); }, 1000); // 请求关闭时的操作 req.on('close', () => { console.log('SSE connection closed.'); res.end(); }); });
处理发送数据
app.use(bodyParser.json()); app.post('/api/sendMsg', (req, res) => { // 处理前端发送的数据 console.log(req.body); // 返回成功 res.status(200).end(); }); app.listen(8080, () => { console.log('app is listening on port 8080'); });
在服务端中处理前端的 post 请求,并处理数据,将数据发送给接收方。在本示例中仅仅返回成功。
总结
本文详细介绍了如何使用微信小程序和 Server-sent Events(SSE) 构建实时聊天应用,并提供了实现的完整示例代码以及解读。我们相信,通过本文的学习和实践,大家可以掌握前端实时数据传输的技术要点,为接下来开发更多更复杂的实时应用打下坚实的基础。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659dec57add4f0e0ff710e1c