项目需求:
1、用nodejs
的socket.io
写了一个简易版的聊天室(实时推送技术,无刷新实现信息实时更新,应用于在线聊天室、在线客服系统、评论系统和WebIM等)2、根据
socket.io
库给出的api
以及《nodejs
实战》给出的demo
实现了, 也只是很基础的, 但放到服务器上后会有网络延迟, 顺序不正确等问题3、看过网上的资料, 没看到有解释很全或者投入生产环境的代码, 都是一些
demo
想请教前辈, 对于一个业务开发中常用的聊天室模块:
1、应该如何去思考呢?
2、整个过程会涉及到哪些知识点?
3、会有哪些难点呢?(比如支持高并发啥的)
4、应该注意什么呢?(比如如何测试或者啥的?)
解决方案
需求分析:
- 实现在线聊天室的基本功能,包括显示在线用户的个人信息
- 用户进行实时聊天,信息推送实时更新
- 其他可扩展功能
技术栈分析
socket.io
是一个开源WebSocket
库,它通过Node.js
实现WebSocket
服务端,同时提供客户端JS
库。socket.io
支持以事件为基础的实时双向通讯,可以工作在任何平台、浏览器或移动设备。
Node.js+Express/koa/egg
环境搭建socket.io
- 聊天基础版(壳模型)
- 模板引擎(
jade/pug
) - 聊天界面
- 系统消息
- 用户上下线
- 单聊和群聊
- 图片发送
- 功能完善
- 项目总结
- 首先需要先从一个产品的角度进行考虑:
- 设计草图,画出聊天室的大致样子,各个组件的位置,标注功能;
- 对每个组件进行分析,确认需要使用的技术;
- 再次确认细节,进行切图工作,如果不具备这项能力可以自己动手画图;
- 搭建开发环境:
- 技术栈
Node.js+socket.io+Express/koa+Mongodb
; - 安装
Node.js
并配置相关依赖,Express有自己的生成器 - 搭建壳模型,也就是最简易的聊天室
- 开发平台推荐使用Linux或者使用Mac
- 技术栈
- 功能介绍:
- 用户列表
- 用户登录
- 在线用户列表
- 文本消息传输
- 用户(谁发的消息)
- 时间(什么时候发的)
- 内容(发的什么内容)
- 图片传输
- 上下线通知
- 用户列表
技术点:
Node.js
Express
socket.io
(包括客户端和服务器端代码,这个直接看官网的文档)server
client
html/css
sco.js、messenger.js
- 模板引擎(
jade/pug
)是非常重要的一个工具,配合Node.js
可以帮助你完成一些复杂的任务,需要重点掌握 - 聊天界面设计:
- 用户列表(用户上线添加/下线移除,用户每次的变更都进行整体更新,不做单独的移除。如果需要进行单独移除,可通过用户下线时的指定对象来移除特定用户)
- 聊天窗口
- 内容展示区(当前用户消息展示/对方用户消息展示)
- 消息发送区(图片传输功能键/消息输入区/消息发送功能键)
- 用户上下线通知
- 键盘事件
- 系统消息
- 界面提醒(上/下线提醒)
sco.js/message.js
- 用户上下线
具体实例可参考网上的资料:
项目总结
- 聊天室分为客户端和服务端,完整的应用其实就是把这两个模块连接起来实现数据通信,然后在分别对两个模块进行细分;
- 根据细节的结果确定其中涉及的技术问题,逐一进行解决,类似于搭积木游戏;
- 比如客户端模块需要
html/css/js
、模板引擎;服务器模块需要Node.js/Express/Koa
、sco.js/message.js
、数据库技术等; Node.js
很适合应用在高并发的场景中,高并发的场景可以使用Nginx来做负载均衡,会有哪些难点需要在实际项目中才会知道,大概是在读写数据和数据传输方面会有一些需要重点解决的问题;- 在
Node.js
中写测试,包括了测试框架、测试异步函数、私有方法、模拟测试环境、依赖HTTP
协议的web
应用,需要了解TDD
和BDD
,还有需要提供测试的覆盖率
Node.js单元测试工具
- 测试框架:
mocha
- 断言库:
should.js
、expect.js
、chai
- 覆盖率:
istanbul
、jscover
、blanket
- Mock库:
muk
- 测试私有方法:
rewire
- Web测试:
supertest
- 持续集成:
Travis-cli
赏
使用微信打赏
使用支付宝打赏
雅致寓于高阁渔舟唱晚,古典悠然;
格调外发园林绿树萦绕,馥郁清香。
扫描二维码,分享此文章