nodejs+websocket实现随机聊天
导览
用NodeJS写的基于websocket的web端在线聊天应用。
后端: Node.JS + mysql + redis
前端: bootstrap + angular
项目地址
GitHub:bitzoChat
说明
这个项目我估计可能会是我这一段时间的主要目标了吧。只是希望自己能坚持下来,别做到一半扔了。
我给这个项目的定位是用来熟悉websocket,以此来练练手。
未来如果有机会的话其实想重新做,因为这次真的只是突发奇想就做起来了,对这方面的只是基本不懂,处于用起来但不理解的状态。未来重做的话,得花点时间想想如何设计,毕竟现在这个代码确实比较乱了。。。
前端的话,只能说凑合看吧,尽量写好看点。
目前进展
- 实现简单注册登录
- 添加好友,删除好友
- 随机配对,进行聊天
- 单向好友系统
规划
- 个人信息更改
- 修改好友模块,更改为双向好友
- 好友在线情况
- 在线好友直接聊天
- 非在线好友留言
- 界面优化
- ……
对webSocket的一点感悟
传统的HTTP协议是一种无状态的协议,只能实现由客户端向服务器端的单向请求(访问),而要让服务器主动向客户端发送消息是不可能的事, 在websocket的帮助下,服务器和客户端可以双向发送消息。
在做这个聊天工具时,每次请求建立一个ws连接后,都将此次的ws连接添加到ws的集合中,说是集合,不过我更倾向于直接用数组,或者map,key直接设置为请求用户的唯一标识,这样在需要的时候取出更方便。
在写的过程中,遇到的一个问题是我发现不能直接通过ws发送数组或者对象。。。
而只能发binary
或者string
,这个让我挺困扰的,一开始我还在纠结,后来想想直接JSON.stringify
,收到了在JSON.parse()
就好啦。这样就和普通在写http的接口啥的没什么不同了。
再者主要的问题就是ws的连接问题,在后端向前端发送消息时,一定要注意的是此ws的状态,要么选择判断其状态,要么得注意异常捕获,否则程序得挂→_→。。。
下面还有很多功能需要实现,再次期间,准备还要多花点时间多去了解了解ws。
不仅是ws,想想这学期计算机网络的考试成绩就心痛,得补补计算机网络了。。