在过去的几个月里,我一直在使用 Socket.io,开发了一个相当复杂的聊天应用程序,其中包含聊天室、踢/禁止/版主/朋友/等。
在开发过程中,我多次重写了该应用程序,但我仍在与我的代码作斗争。
我真的很喜欢 JavaScript,但我发现随着应用程序的增长,很难维护它。我已经阅读了大量关于如何编写聊天应用程序的“教程”,但它们都只涵盖了最基本的方面。GitHub 上的所有示例应用程序也是如此,甚至是我在网络上找到的大多数聊天应用程序(其中大多数只是简单的 IM,没有任何用户管理)。
有些用例对我来说似乎太荒谬了,例如将用户踢出房间。
- 主持人单击踢按钮 -> 向服务器发出事件
- 服务器将用户名与套接字配对(或仅向所有用户广播并在客户端过滤)-> 向他发出 kicked 事件
- 用户向服务器发出注销事件,并显示他被踢的消息(注销只是我的惩罚实现)
- 用户从聊天室的用户列表中删除 -> 将当前用户列表发送给房间中的所有用户
这似乎并不太复杂,但是当我添加客户端发生的所有回调来管理 UI 时(因为我使用 AngularJS,我使用事件在控制器之间进行通信),以及服务器端的大量回调,由于一切都是非阻塞的,我发现这真的很难测试。
客户端还有另一个问题,我必须在多个地方监听套接字事件,所以我必须有一种单例全局套接字对象,并在多个地方挂钩事件监听器。
我做错了什么,还是这个回调地狱是使用 websockets 的结果而无法解决?
有什么方法可以让开发这样的应用程序更容易吗?例如 Socket.io 的替代技术?到目前为止,我只找到了 5 个月前最后一次提交的NowJS和流星,这真的很酷,但是从网站上看,它似乎并不稳定。