用vue2写一个聊天机器人

💡 原文中文,约10400字,阅读约需25分钟。
📝

内容提要

小张同学创建了一个组件装备路由,其中包括了一个聊天界面的组件。聊天界面包括了小张机器人和用户之间的对话框,以及发送消息的输入框。他还介绍了头像处理、聊天信息的数据结构和渲染、以及使用WebSocket进行实时通信的方法。他还提到了使用socket.io进行封装的解决方案。最后,他还介绍了如何滚动到聊天界面的底部。

🔎

延伸解读

WebSocket 与 HTTP 的互补关系

文章指出 HTTP 协议通信只能由客户端发起,无法实现服务器主动推送,因此需要 WebSocket 来支持双向平等对话。在聊天室等场景中,轮询效率低且浪费资源,而 WebSocket 允许服务器主动推送信息,更适合即时通讯。这解释了为什么在已有 HTTP 的情况下仍需引入 WebSocket。

socket.io 对原生 WebSocket 的简化

原生 WebSocket 使用较为繁琐,需要手动处理连接、消息和关闭等事件。文章推荐使用 socket.io 封装方案,它提供前后端支持,前端只需安装 socket.io-client 并导入,通过 io() 建立连接,用 emit 发送消息、on 接收消息、close 关闭连接,简化了通信流程。

聊天列表自动滚动的实现要点

文章通过 watch 监听 list 数组变化,在数据更新后使用 $nextTick 等待 DOM 渲染完成,再将聊天容器的 scrollTop 设置为 scrollHeight,从而自动滚动到底部。这解决了新消息到达时滚动条不会自动下移的问题,确保用户始终看到最新消息。

组件销毁时关闭连接的必要性

在组件销毁前,文章调用 beforeDestroy 钩子执行 this.socket.close() 来关闭 WebSocket 连接。这可以避免连接残留,防止不必要的资源占用和潜在的内存泄漏,是使用 WebSocket 时应当注意的清理步骤。

❓

Q&A

如何在Vue2中创建聊天机器人的组件?

可以通过创建一个名为user/chat.vue的组件,包含聊天框和输入框来实现聊天机器人。

WebSocket在聊天机器人中的作用是什么?

WebSocket用于实现实时通信,解决了HTTP协议的单向请求问题,允许服务器主动向客户端推送信息。

如何使用socket.io简化WebSocket的使用?

使用socket.io可以通过简单的API进行连接、发送和接收消息,避免了原生WebSocket的复杂性。

聊天信息的数据结构是怎样的?

聊天信息的数据结构包括消息类型(如1表示机器人消息,2表示用户消息)、消息内容和时间戳。

如何实现聊天界面自动滚动到底部的功能?

可以通过监听聊天信息列表的变化,并在变化后设置聊天框的scrollTop属性为其scrollHeight来实现自动滚动。

组件销毁时如何处理WebSocket连接?

在组件的beforeDestroy生命周期钩子中调用this.socket.close()来关闭WebSocket连接。

🏷️

标签

➡️

继续阅读