使用WebSockets是否有服务器成本?

我已经离开了我在PHP / MySQL的舒适区,因为语法/封装/过程的东西可能会令人沮丧。

上周,我开始玩,并遵循一些教程来使用Node.js / Socket.IO创build一个实时聊天应用程序。 到目前为止,我从来没有用WebSockets做过任何事情,而且看起来非常酷 – 服务器和客户端之间的即时通信非常棒。

现在,请原谅我在这里的缺乏理解,但是HTTP已经build立起来了,所以你不能在客户端和服务器之间保持连接 – 而且我对Comet的基本理解是它迫使连接保持开放永不终止写入stream,只发送NUL字节。 这听起来…服务器密集型。

WebSockets如何工作呢? 如果我的聊天应用程序一次有几百人,服务器是否会超载? 当我在服务器上使用PHP / MySQL时,服务器一次只处理一个请求 – 如果我要使用AJAX,并且每隔一秒轮询一次,我想就会有数千个的要求一分钟。

我的问题是,WebSockets是否适合大型应用程序? 没有真正高带宽的服务器,这是否可行?

我想它归结为:有一个重要的服务器负载/用户体验间差距,彗星,WebSockets的Ajax轮询?

谢谢!

有很多很好的概述站点阅读关于如何在这里和这里的 websockets一般工作。

简而言之,他们启动与某种types的HTTP请求的连接,然后在客户端和服务器之间build立一个直接的TCP双向连接。

有一些服务器开销维护一个开放的套接字到客户端,所以如果你一次预计成千上万的这些,你将不得不确保你的服务器基础设施能够达到这个规模。 CPU负载只会与在任何给定时间处于繁忙状态的插槽数量成正比,因为空闲插槽不会占用任何CPU。

即使没有直接的WebSocket支持,Comet库也会尝试支持类似WebSocket的接口。 这是一些有点低效率的黑客开始出现,因为它试图通过保持一个开放的HTTP连接来模拟一个双向的TCP套接字。 如果你使用真正的WebSocket,这不是一个问题。

考虑到带宽,websocket应该比Comet或AJAX长轮询的所有解决scheme更好或至less不会差很多。 websocket协议允许你只在需要的时候发送数据,并且只对你发送的每条消息应用最小的填充(8-14字节,加上强制的TCP和IP成帧)。

每个活动客户端都将打开一个单独的连接是正确的。 所以,当你有很多(数千)同时在线的客户端,你可能会遇到你的networking服务器,框架或者操作系统的连接限制,但是这些限制通常是可configuration的。

开始学习WebSockets以及它如何工作的好地方就在这里 。 WebSocket连接“永不”终止,除非遇到意外的networking问题,或者客户端或服务器明确决定结束连接。

Node.js可以处理很多打开的连接(只要你的操作系统打开的文件描述符设置足够高),所以通常一个系统/线程可以让你很远。 但是,如果您需要扩展到一个线程之外,则只要系统不足,就可以使用“集群”模块和/或在多个系统之间进行负载平衡。

如果有的话,WebSockets的开销可能会更less,因为您不像长查询或类似解决scheme那样创build和拆除连接。