nodejs+websocket实现随机聊天

bitzoChat

导览

用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,想想这学期计算机网络的考试成绩就心痛,得补补计算机网络了。。