我目前正在服务器和Web / iPhone / Blackberry客户端上使用Node.js编写一个简单的跨平台应用程序。带宽和延迟要求类似于您在IRC“派对游戏”或任何聊天系统中看到的要求。我已经使用HTTP长轮询(双向讲JSON)开发了Web客户端。
对于iPhone / blackberry,我可以使用内置的HTTP库与我当前的实现进行对话,或者我可以在服务器上编写套接字侦听器并使用套接字与之对话。这样做有什么好处吗?为什么不鼓励使用非浏览器的HTTP客户端?
无法与iPhone通话,因为我对网络堆栈的技术细节了解不足,但是对于BlackBerry,来自浏览器的HTTP请求通常与应用程序发起的请求不同。作为解决方案的BlackBerry不仅包括设备端TCP / HTTP堆栈,还包括BlackBerry服务,该服务(取决于您是否在企业中)包括托管有移动数据服务(BES / MDS)的BlackBerry Enterprise Server。您的企业网络或Research In Motion托管的BlackBerry Internet Services(BIS)服务器,该服务器代理来自移动浏览器的所有连接。这些服务器可以做很多事情,包括处理Cookie,身份验证和内容转码的某些方面,以使移动设备可以更轻松地消费内容(图像等)。对于BES / MDS,它们甚至可以充当HTTPS连接中的安全端点。
无论如何,这也意味着您希望正常的TCP / HTTP连接实现的许多功能实际上发生在设备之外,因此可以由运营商,企业或RIM控制。准系统套接字是不同的,因为中间的各种服务器对TCP套接字的假设不能像对HTTP连接的假设那样多,因此它们不会弄乱您的HTTP请求。出于这个原因,许多BlackBerry应用程序实际上最终在套接字层的顶部编写了自己的HTTP客户端,因此,如果您必须执行HTTP长轮询(Comet?)之类的操作,则一定要在套接字连接的顶部编写它,而不是内置的HTTP连接。