有个不错的文章《
Comet:基于 HTTP 长连接的“服务器推”技术》。文章提到Comet现实应用的需求:
- 监控系统:后台硬件热插拔、LED、温度、电压发生变化;
- 即时通信系统:其它用户登录、发送信息;
- 即时报价系统:后台数据库内容发生变化;
也提到多种技术实现服务器推送。
我现在比较同意
这个,介绍了选择要注意的事项,比如服务器对long-polling的支持。现在主要关心:
如果数据推送频率不高,并发压力不大,可以用基于 AJAX 的长轮询(long-polling)方式,实现比较简单。nginx
有个Module可以支持long-polling,可能以后还支持Streaming。long-polling每次返回数据后是要再次请求。
如果数据变化快,想以推送为主,可以用基于 Iframe 及 htmlfile 的流(streaming)方式。
这里有比较不错的介绍,里边还介绍了APE等一些服务器实现,要根据具体情况来选择。比如APE是C实现的,我是用java的,对我来说它不容易扩展(基本javascript的扩展性能可靠性能实现的功能要测试,对于实在想走80端口,这个是我目前找到的功能全,而且官方说支持100K+并发,但是目前资料少,说明用的人不多啊)。APE1.0主要还是long-polling,流方式使用XHRStreaming在IE上不行;相比而言streamHub流是使用写<script>标签实现的,可以跨浏览器。那些不开源的不要说了,python也不熟悉,Jetty 6 和 Tomcat 6已经支持Comet,一般情况可以满足,并发太大了也要做选择,
有人用netty自己实现,支持10万以上。想自己写服务器
看这个用xsocket实现了。
引用
2010.5补充:以前对长连接和http persistent connection没有太清晰的概念,在脑子里老是把请求和tcp连接混在一块想。long-polling方式在firebug里能看到一个请求及数据返回响应,然后再请求,但都是同一tcp连接(支持http1.1的服务器)。像streamHub那样用流方式的,我们看到一个返回响应数据不断涨,可通过其它请求,改变这一响应数据内容。以前错误的认为:这样一个响应才是同一连接,long-polling会重新建立tcp连接。
出于性能或其它原因,有些应用比较适合用socket。B/S结构客户端可以用flash,以后HTML5,也是不错的选择。看
这里文章中提到:
引用
自己实现的server通常存在性能及可扩展性的问题,因此实现全部功能需要投入大量的开发精力。
Hemlock通过flash长连到XMPP Server上。由于XMPP Server(如openfire, ejabberd等)本身就支持多服务器,因此使用默认的版本就可以支持上十万的并发,如果稍加优化,同时支持上百万用户也不会有太大问题。
openfire开源的,基于mina实现,主要是java我熟啊
(喜欢java代码的也可以看看red5或者http://code.google.com/p/gfs-server/)
再加几个基于netty的开源项目:
http://openr66.free.fr/GoldenGateFTP.html
http://code.google.com/p/jmemcache-daemon/
http://kevwil.github.com/aspen/
http://code.google.com/p/sensei-search/
(看到过的资料单机2*4core 16GB实现近50万在线连接,每秒处理近10万请求,c实现,内核,网卡等都经过优化;看过java最高的就是Using Netty we have comet running on 100.000+ open connections - this uses some GB of memory and 20% of CPU on a quad core server.一个四核服务器10万以上连接)
分享到:
相关推荐
在这个"**dwr实现的服务器推demo**"中,我们看到一个实例,展示了如何利用DWR的技术来实现实时的、无需刷新的服务器推送功能。 服务器推是一种技术,它允许服务器主动地将数据发送到客户端,而不需要客户端(通常是...
在同一局域网中,Android推流端(比如平板)内置RTSP/RTMP服务器,Android推流端将摄像头的画面实时推流到内置的RTSP/RTMP服务器上,然后在Android手机上实时进行播放。 本方案实现了如下功能 : 平板端内置RTSP/RTMP...
在“asp.net 实现服务器推功能”这个主题中,我们将深入探讨如何利用ASP.NET来实现服务器端向客户端实时推送数据的技术,即所谓的“服务器推”。 传统的HTTP协议是基于请求-响应模型的,客户端发起请求,服务器返回...
服务器推送技术主要分为以下几种实现方式: 1. **Comet技术**:Comet是一种利用HTTP长连接来实现实时通信的技术。通过让服务器保持HTTP连接打开状态,直到有新数据可推送给客户端时才关闭连接。这种方式可以是HTTP...
5. **处理推送消息**: 在JavaScript事件处理器中,接收并处理由服务器推送过来的消息。可以更新DOM元素,显示新消息,或者执行其他客户端操作。 6. **优化性能和资源管理**: 为了防止过多的连接占用服务器资源,...
在这个“服务器推送示例 - IE/火狐/谷歌 长链防断实用版”中,我们关注的重点是如何实现跨浏览器的兼容性,特别是解决Internet Explorer(IE)浏览器在处理长连接时容易断开的问题。 首先,服务器推送在ASP.NET框架...
在Web开发中,服务器推技术能够实现实时性更强的应用场景,如在线聊天、股票实时更新、游戏状态同步等。VS2008是Visual Studio 2008的缩写,是微软开发的一款集成开发环境,广泛用于创建ASP.NET应用程序。 "asp.net...
以下是对标题和描述中涉及的.NET实现Server Push(服务器推送)源码的详细解释: 首先,`ServerPush.sln`是一个Visual Studio解决方案文件,它包含了项目的所有配置和依赖关系。当你打开这个文件时,Visual Studio...
"服务器推技术入门"这个资料集很可能包含了从基础知识到实践案例的各种教程和示例代码,适合初学者逐步掌握服务器推技术。学习过程中,可以先理解服务器推的基本概念,然后通过搭建简单的WebSocket服务器和客户端来...
Java向苹果服务器推送消息是iOS应用开发者经常遇到的需求,用于实时通知用户新的信息或系统状态。APNs(Apple Push Notification service)是苹果公司提供的推送服务,允许开发者将消息推送到用户的iOS设备上。本...
本文将详细介绍如何实现DWR的服务器推送功能。 一、DWR简介 DWR的核心功能是通过AJAX技术创建了一个JavaScript到Java的桥梁,使得开发者可以像操作本地对象一样操作远程服务器上的对象。它支持自动类型转换、错误...
在本文中,我们将深入探讨如何使用live555库实现实时流的推流服务器。Live555是一个开源的C++库,专门用于实时多媒体流传输,支持RTSP(Real-Time Streaming Protocol)协议,广泛应用于视频直播、VoIP和其他需要...
在这个场景中,我们将探讨如何使用Java Applet来实现服务器推(Server-Side Push)技术,这是一个使得服务器能够主动向客户端发送数据而非等待客户端请求的机制,特别适用于实时性要求高的应用,如温度监控。...
【机关推送服务器端实现】是针对企业或组织内部通信需求的一种高效解决方案,它利用了极光推送(JPush)服务来实现在服务器端向多个客户端发送消息的功能。极光推送是一家提供推送服务的公司,其产品广泛应用于移动...
5. **客户端接收**:在JavaScript中,使用DWR提供的API注册回调函数,接收到服务器推送的数据后进行处理和展示。 Java推技术不仅限于DWR,还有其他框架如Comet、Atmosphere等也提供了类似的功能。但DWR因其易用性和...
5. **Java Applet套接口**:通过Java Applet在客户端建立套接字连接,实现服务器推送。但Java Applet需要客户端安装,兼容性和安全性问题限制了其应用。 服务器推送技术的发展反映了Web技术从静态页面向动态、实时...
**DWR(Direct Web Remoting)服务器推送技术详解与WebQQ实现** DWR,全称为Direct Web Remoting,是一种在JavaScript和Java之间进行远程方法调用(Remote Method Invocation,RMI)的技术,允许Web应用程序实现...
在C# .NET环境中实现服务器推送,有多种方法,如WebSocket、SignalR、Server-Sent Events (SSE)等。下面将详细介绍这些技术: 1. WebSocket: WebSocket提供全双工通信,允许服务器和客户端双向传输数据。在C#中,...
本文将详细探讨如何通过JAVA实现多种服务器推送客户端的方式,包括Ajax轮询、长连接、长轮询以及Iframe刷新。 1. **Ajax轮询** Ajax轮询是最基础的实现方式,其原理是客户端定时发送Ajax请求到服务器,服务器接收...