2012-06-07 47 views
7

我目前正在与DerbyJS合作,因为它培养干净的DRY客户机/服务器代码。副作用(大多数人使用框架的主要原因)是使用Socket.IO创建实时应用程序。在这种情况下,我不需要需要实时,但它是一个很好的补充。Socket.IO - 是否关注开放连接?

我的问题是 - 我是否通过使用Socket.IO以及它维护的所有打开的连接来牺牲可伸缩性/性能?由于没有开放的连接,会使用Backbone + ExpressJS释放资源吗?

回答

10

保持一堆开放的连接显然在服务器开销方面有一定的代价,但我不担心这样的担忧,除非你有明显的扩展问题。一旦你有明显的缩放问题,你应该有足够的收入来购买更多的服务器资源。服务器非常便宜,你的时间非常昂贵。不要担心优化小东西。

+0

总的来说,我认为这些都是适度的经验法则,但它们是非常商业驱动的。并非所有软件都是在商业环境中编写的。进一步说,“不要问这个问题,因为X和Y”只比说“不要问这个问题”好一点。 –

5

我是否通过使用Socket.IO牺牲了可扩展性/性能,并且所有的 都保留了那些打开的连接?

如果您希望在新信息可用时立即更新页面(动态页面)。然后保持连接打开使用非阻塞io是最有效的方法来做到这一点。幸运的是,node.js确实使用了非阻塞的io。这是node.js非常流行的原因之一(另外,您可以使用JavaScript编写代码,这是最流行的编程语言)。如果你真的不需要它(也是在将来),因为你的网站是相当静态的(不像你说的那样实时),那么关闭连接将节省你的资源。

因为没有 打开连接,会使用Backbone + ExpressJS释放资源吗?

我会看看使用backbone/express组合与derbyjs开发您的网站的成本(开发时间)。

然后像Nate再次提到Socket.io可以很容易地处理很多(1000+)并发连接。 如果使用derbyJS更容易开发,那么我会使用它。当你越过这条路时,你总是可以决定添加更多的服务器或者重新设计(可以雇用额外的程序员)你的网站使用express/backbone组合。首先尝试让用户以最小的努力(开发时间)找到您的网站的价值。

P.S:我认为你应该尽量保持你的系统尽可能的模块化,这样就可以用最少的时间替换Derby.js。