如何使用Socket.io和Node.js开发大型聊天应用程序

Jak*_*old 11 javascript chat websocket node.js socket.io

在过去的几个月里,我一直在使用Socket.io,开发了一个包含聊天室,踢/禁止/主持人/朋友等的相当复杂的聊天应用程序.

在开发过程中,我已经多次重写应用程序,我仍在使用我的代码.

我非常喜欢JavaScript,但我发现随着应用程序的发展,很难维护它.我已经阅读了大量有关如何编写聊天应用程序的"教程",但它们都涵盖了最基本的方面.同样适用于GitHub上的所有示例应用程序,甚至是我在网络上找到的大多数聊天应用程序(大多数只是简单的IM而没有任何用户管理).

有些用例对我来说似乎太荒谬了,例如从一个房间踢一个用户.

  • 主持人点击踢脚按钮 - >向服务器发出事件
  • 服务器将用户名与套接字配对(或者只是广播给所有用户并在客户端进行过滤) - >向他发送踢踢事件
  • 用户向服务器发出一个注销事件,并且还显示一条消息,表明他被踢了(注销只是我执行的惩罚)
  • 用户从聊天室的用户列表中删除 - >将当前用户列表发送给会议室中的所有用户

这似乎并不太复杂,但是当我添加在客户端发生的所有回调来管理UI时(因为我使用AngularJS,我使用事件在控制器之间进行通信),以及服务器端的大量回调,由于一切都是非阻塞的,我发现这很难测试.

在客户端有另一个问题,我必须在多个地方监听套接字事件,所以我必须有一个单独的全局套接字对象,并在多个地方挂钩事件监听器.

我做错了什么,或者这个回调是否因为使用websockets无法解决问题?

有没有办法让像这样的开发应用程序更容易?例如Socket.io的替代技术?到目前为止,我只发现了5个月前最后一次提交的NowJS流星,这真的很酷,但是看看网站看起来并不稳定.

And*_*Ray 7

只需使用承诺我的朋友.jQuery内置它们,但在nodejs方面你可以使用q库.没有它们就不要编写异步代码!他们需要一点点习惯,但是一旦你在心态上编写异步代码是轻而易举的.

还有像async这样的库,可以为回调代码提供实用程序功能.但是不要让人气欺骗你.承诺是甜蜜的.

对于异步代码测试,您不需要比nodeunit更远,它可以为您提供一个简单的done()功能,您可以在测试完成后调用它,因此它可以运行,只要您愿意.