[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-9045":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},9045,"vue-chat","microzz\u002Fvue-chat","microzz","👥Vue全家桶+Socket.io+Express\u002FKoa2打造一个智能聊天室。","https:\u002F\u002Fmicrozz.com\u002Fvue-chat\u002F",null,"Vue",978,248,42,8,0,48.19,false,"master",true,[22,23,24,25,26,27,28,29,30,31,32,33,34],"express","koa","koa2","koajs","scss","socketio","vue","vue-router","vue2","vuejs","vuejs2","vuex","vuex2","2026-06-12 04:00:42","# Vue.js+Socket.io+Koa2打造一个智能聊天室\r\rVue.js全家桶+Socket.io+Express\u002FKoa2 打造的一个智能聊天室。\r已经开源啦！为了方便大家学习，智能机器人、IP定位接口也开放了！接口请在源码中查看😄\r\r> &nbsp;&nbsp;&nbsp;QQ群里面的智能机器人很火，于是用Vue.js+Socket.io+Koa2打造了一个智能聊天室，实现了IP定位、在线群聊，加入了Emoji表情😄，以及接入了智能机器人😏\r\r## 前言\r话说最近前端技术圈也有派系之争了，是好事还是坏事？萝卜青菜各有所爱，本项目采用的是Vue.js做前端页面展示，大家完全可以换成自己别的喜欢的，React、Angular等等，每个框架都有可取的地方，这里不多说😂下面扯到正题上👇\r\r## 预览\r\r在线预览地址：👉 https:\u002F\u002Fmicrozz.com\u002Fvue-chat\u002F\r\r![Vue.js+Socket.io 智能聊天室 microzz.com](https:\u002F\u002Fdn-mhke0kuv.qbox.me\u002F24330ba3e01436df1eb8.png)\r\r![Vue.js+Socket.io 智能聊天室 microzz.com](https:\u002F\u002Fdn-mhke0kuv.qbox.me\u002Fa5abbff92a442fa2d356.png)\r\r## 源代码\r 现在已经开源： 👉https:\u002F\u002Fgithub.com\u002Fmicrozz\u002Fvue-chat\r 欢迎star和提出宝贵意见😄\r\r## 技术栈\r* **Vue2.0**：前端页面展示。\r* **Socket.io**：实现实时通信\r* **Vuex**：Vuex，实现不同组件间的状态共享\r* **vue-router**：页面路由切换\r* **axios**：一个基于 `Promise` 的 HTTP 库，向后端发起请求。\r* **Express**、**Koa2**：因为vue-cli生成的项目是基于**express**的，所以在开发阶段我使用的是它，但是真正上线生产环境我换成了**Koa2**。\r* **Moment.js**：一个时间处理的库，方便对时间进行格式化成需要的格式。\r* **ES6**、**ES7**：采用ES6语法，这是以后的趋势。箭头函数、Promise等等语法很好用。\r* **localStorage**：保存用户信息以及聊天记录。\r* **Webpack**：vue-cli自带Webpack，但是需要自己改造一下，比如要对需要安装sass相关loader，vue-cli已经配置好了webpack，你只需要安装依赖就可以，使用的时候只需要`\u003Cstyle lang=\"scss\">\u003C\u002Fstyle>`。\r* **SASS**(**SCSS**)：用SCSS做CSS预处理语言，有些地方很方便，个人很喜欢用。(详看👉[SASS用法指南](https:\u002F\u002Fmicrozz.com\u002F2017\u002F03\u002F18\u002Fsass\u002F))\r* **flex**：flex弹性布局，**简单**适配手机、PC端。\r* **CSS3**：CSS3过渡动画及样式。\r\r## 分析\r\r### Socket.io\r通过Express\u002FKoa在服务端可以这样做:\r\r```javascript\r\u002F\u002F Server (app.js)\r\rvar app = require('express')();\rvar server = require('http').Server(app);\rvar io = require('socket.io')(server);\r\rserver.listen(80);\r\rapp.get('\u002F', function (req, res) {\r  res.sendfile(__dirname + '\u002Findex.html');\r});\r\rio.on('connection', function (socket) {\r  socket.emit('news', { hello: 'world' });\r  socket.on('my other event', function (data) {\r    console.log(data);\r  });\r});\r```\r\r客户端代码\r\r```javascript\r\u002F\u002F Client (index.html)\r\r\u003Cscript src=\"\u002Fsocket.io\u002Fsocket.io.js\">\u003C\u002Fscript>\r\u003Cscript>\r  var socket = io.connect('http:\u002F\u002Flocalhost');\r  socket.on('news', function (data) {\r    console.log(data);\r    socket.emit('my other event', { my: 'data' });\r  });\r\u003C\u002Fscript>\r```\r\r不管是服务器还是客户端都有 `emit` 和 `on` 这两个函数，可以说 socket.io 的核心就是这两个函数了，通过 `emit` 和 `on` 可以轻松地实现服务器与客户端之间的双向通信。\r\r`emit` ：用来发射一个事件或者说触发一个事件，第一个参数为事件名，第二个参数为要发送的数据，第三个参数为回调函数（一般省略，如需对方接受到信息后立即得到确认时，则需要用到回调函数）。\r`on` ：用来监听一个 emit 发射的事件，第一个参数为要监听的事件名，第二个参数为一个匿名函数用来接收对方发来的数据，该匿名函数的第一个参数为接收的数据，若有第二个参数，则为要返回的函数。\rsocket.io 提供了三种默认的事件（客户端和服务器都有）：`connect` 、`message` 、`disconnect` 。当与对方建立连接后自动触发 `connect` 事件，当收到对方发来的数据后触发 `message` 事件（通常为 `socket.send()` 触发），当对方关闭连接后触发 `disconnect` 事件。\r\r此外，socket.io 还支持自定义事件，毕竟以上三种事件应用范围有限，正是通过这些自定义的事件才实现了丰富多彩的通信。\r\r最后，需要注意的是，在服务器端区分以下三种情况：\r\r`socket.emit()` ：向建立该连接的客户端广播\r`socket.broadcast.emit()` ：向除去建立该连接的客户端的所有客户端广播\r`io.sockets.emit()` ：向所有客户端广播，等同于上面两个的和\r\r## Vue.js\r在Vue的方面就比较常规了，Vue全家桶：Vue2.0+Vuex+axios+vue-router,我GitHub的有几个开源项目可以参考👉https:\u002F\u002Fgithub.com\u002Fmicrozz\r\r## 总结\r\r1. 组件状态多了用Vuex管理很方便，引用 Redux 的作者 Dan Abramov 的话说就是：\r> Flux 架构就像眼镜：您自会知道什么时候需要它。\r\r2. 事先一定要先想好整个页面组成，怎样去分组件开发，这样在开发阶段会事半功倍。\r3. Moment.js在Vue中用ES6的方式引入会有问题，可以尝试在main.js尝试这样`import moment from 'moment'` `Vue.prototype.moment = moment;`给Vue的原型上添加moment，这样就可以在Vue的实例中随意使用它了。\r4. get方式通过URL传参最好使用`encodeURI`对参数进行编码\r5. 一定要处理好那些异步操作，否则会带来各种问题。开发阶段使用的是`Promise`，上线时候使用了ES7的`Async`+`Promise`的组合，让异步操作更加合理。\r\r## About\r关于我：👉https:\u002F\u002Fmicrozz.com\u002Fabout\u002F\n\rGitHub：👉 https:\u002F\u002Fgithub.com\u002Fmicrozz\n\rE-mail: 👉 [zhaohui@microzz.com](mailto:zhaohui@microzz.com)\n\n","microzz\u002Fvue-chat 是一个基于 Vue.js、Socket.io 和 Koa2\u002FExpress 构建的智能聊天室项目。该项目实现了实时在线群聊、IP定位、Emoji表情支持以及接入了智能机器人，提供了一个功能丰富的聊天体验。其核心功能包括使用 Socket.io 实现客户端与服务器之间的双向通信，Vuex 管理组件状态共享，vue-router 处理页面路由切换，以及通过 Axios 发起 HTTP 请求。此外，项目还采用了 SASS 作为 CSS 预处理器，并利用 Flex 布局适配不同设备。此项目非常适合需要快速搭建具有实时通信功能的应用场景，如在线客服系统、团队协作工具或社区论坛等。",2,"2026-06-11 03:20:55","top_language"]