我听说我可以使用Comet作为服务器推送技术和我的Ajax代码来提高我的Web应用程序的性能.
这款Comet技术有多成熟?
是否所有Web服务器,编程语言和浏览器都支持它?
使用Comet有什么缺点?
我正在写一个基于AJAX/COMET的在线聊天室.我的设计是:
请求
-----------------等待------------------------->发送转储数据
-----------------等待------------------------->发送转储数据
-----------------等待------------------------->发送转储数据
-----------------等待------------------------->发送转储数据
-----------------等待------------------------->发送转储数据
------发生了什么事,得到回应.
另一个要求..... ....
如您所见,服务器保留请求并等待发生的事情,如果发生了某些事件,只需推送数据并完成请求.然后客户端将发出另一个请求.在请求中有勾选,因此如果在两个请求的间隙之间发生事件,则服务器知道客户端有待处理的事件.
在浏览器超时之前,服务器还会发送一些空闲数据以防止客户端超时.
现在,问题出现了:不同浏览器的超时行为是什么?我知道浏览器发送请求并等待数据,如果等待时间太长,它会超时.但是不同浏览器的超时行为是什么?是否有任何标题可以控制浏览器的超时行为?通过了解浏览器的超时行为,以便我可以决定如何处理它们.我在哪里可以找到这些数据?
我不是故意要问,ASPNET中的Comet比Jetty更容易吗? 我的意思是,与其他替代品相比,彗星更容易是ASPNET还是Jetty? 我认为ASP.NET和Jetty的异步功能特别使得Comet在这些平台上实现时更具可扩展性,我想确认一下.
ASPNET在2005年引入了"异步页面".这个想法是将熟悉的.NET异步模型应用于ASP.NET页面处理.
public partial class AsyncPage : System.Web.UI.Page
{
private WebRequest _request;
void Page_Load (object sender, EventArgs e)
{
AddOnPreRenderCompleteAsync (
new BeginEventHandler(BeginAsyncOperation),
new EndEventHandler (EndAsyncOperation)
);
}
IAsyncResult BeginAsyncOperation (object sender, EventArgs e,
AsyncCallback cb, object state)
{
_request = WebRequest.Create("http://msdn.microsoft.com");
return _request.BeginGetResponse (cb, state);
}
void EndAsyncOperation (IAsyncResult ar)
{
string text;
using (WebResponse response = _request.EndGetResponse(ar))
{
using (StreamReader reader =
new StreamReader(response.GetResponseStream()))
{
text = reader.ReadToEnd();
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个CometProcessor Servlet在Apache Tomcat中运行良好.我的server.xml连接器条目是:
<Connector connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)
我可以直接使用指向Tomcat的URL命中servlet(名为'EventBus'),如下所示:
我有Apache httpd提供.jsp文件和servlet与一个基本的workers.properties文件与一个工人,如:
worker.ajp13w.type=ajp13
worker.ajp13w.host=localhost
worker.ajp13w.port=8009
Run Code Online (Sandbox Code Playgroud)
除了我的CometProcessor servlet之外,这一切都能正常工作.当我尝试点击这个servlet时,我得到:
HTTP method GET is not supported by this URL
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何正确地将请求从Apache httpd转发到Apache Tomcat以获得像CometProcessor这样的NIO连接?
谢谢你的帮助.
我感兴趣的是一个非常好的方式来做meebo和facebook和myspace等即时通讯,也适用于页面上的通知.我的网站上的示例现在,当用户收到新邮件,照片评论,个人资料评论,朋友请求以及其他一些事情时,他们将在使用jQuery和AJAX的页面上收到通知消息和链接.
我相信大规模这不是最好的方法,因为我的jquery代码必须基本上运行一个PHP脚本,每隔30秒左右查询mysql表,对于每个用这个脚本打开页面的用户运行.如果我能找到一种有效的方法,我最终会在屏幕底部的聊天栏中添加像facebook这样的即时消息.
我听说过Comet和HTML5 WebSockets这两个术语,但我不确定这些是否是我应该考虑的这类功能的解决方案?我希望将带宽保持在最低限度,并且每隔几秒运行一次查询在高流量站点上看起来效率不高.
如果你知道一些好的解决方案,请解释一下它们的工作方式
它的功能是所谓的"服务器推送",谷歌波似乎也在利用.
有人可以通过代码片段解释这个概念它在Web应用程序中的实际工作方式吗?
我正在使用服务器端变量进行应用程序,每秒都会发生变化.每一秒都需要在所有打开网页的客户端上显示这些新变量.
现在大多数人都告诉我要用彗星,因为我需要每秒推/拉数据,现在我有几个问题:
什么是更好的解决方案,看看我需要新的数据EVERY SECOND,从客户端拉出或推送服务器?
此外,服务器端的项目ID(具有该ID的变量)可以更改,当客户端刷新页面时,他需要获取最早(和生存)的ID.这意味着我在客户端的jquery/javascript必须知道他在页面上得到了哪个ID,最好的方法是什么?
最后一件事是我找不到一个好的(不贵)彗星库/ api for asp.net(C#).有没有人用过彗星图书馆,效果很好?我们正在寻找一个应该能够随时拥有2000个彗星连接的站点.
我在php中寻找COMET(DWR - Direct Web Remoting)的例子.我在google搜索并在url下面找到了相当有帮助的内容.
http://www.zeitoun.net/articles/comet_and_php/start
我打算用symfony实现COMET.任何机构都有更多的例子.体验Symfony框架?
我正在开发一个使用Comet Hidden iFrame技术将数据从服务器推送到移动浏览器的Web应用程序.
在Mobile Safari上一切正常,但Android更加痛苦.它似乎需要从服务器发送4 KB消息,以便将消息记入帐户.这是针对每条消息而不仅仅是第一条消息.
有些人尝试使用XMLHttpRequest流媒体实现Comet但具有相同的4KB问题(http://code.google.com/p/android/issues/detail?id=13044)
有没有人设法在Android浏览器上实现Comet技术而无需将消息填充到4KB?
在Android 2.1,2.2上测试过
即使在Android 4.0版本http://caniuse.com/eventsource上也似乎不支持服务器发送事件
websocket http://caniuse.com/websockets也是如此
谢谢
-seb
我搜索得非常糟糕......任何人都可以告诉我,SignalR和Comet技术之间的确切区别是什么......我知道Comet与SignalR进行相同的客户端 - 服务器通信...它将数据推送到客户端就像SignalR一样,那么2.请帮忙.
谢谢!!!Shivanand Arur.