我一直想知道使用COMET /推送技术是否真的有利于更简单的轮询和长请求,其中服务器将等待一定的最大时间来发生新事件,然后告诉客户没有发生任何事情.
这两种技术都有类似的客户端延迟,虽然常见的知识是长期请求更糟糕,因为它们需要建立新的连接,还有一个事实是HTTP保持活着 - 所以最后两者似乎产生了非常相似的流量/负载量.
那么使用COMET有一些明显的优势吗?
我已经了解了COMET流媒体是什么,以及让它在主流浏览器中运行所需的各种黑客攻击.遇到的问题似乎有两个:1.服务器能够支持许多持久连接2.实现JS功能
我有一个应用程序,我需要执行COMET流.我已经解决了上面的第一个问题 - 我有一个自定义服务器运行,当它以块的形式到达时提供更新.我想现在能够使用JS连接到此URL,因此我可以收到更新.
我可以使用一个简单的COMET库吗?我看到了Orbited项目.我可以使用orbited的客户端JS来执行此操作吗?我需要在后端执行哪些修改?
我正在尝试在rails电子商务应用程序上创建一个ruby,潜在客户将能够下订单,商店所有者将能够实时接收订单.最终订单将被记录到数据库中(当时是SQLite),并且店主将打开一个浏览器窗口,新订单将在订单完成后出现.(应用程序信息:我正在使用HOBO rails框架,并计划在Heroku中托管应用程序)
我现在正在考虑使用最好的技术来实现这一点,因为预计应用程序会有很多用户发送大量订单:
1)每个浏览器窗口每隔X分钟刷新一次页面,连续轮询服务器以获取新记录(新订单).当然,这会给服务器带来沉重的负担.
2)如上所述,但用某种AJAX框架轮询服务器.
3)使用某种服务器推送技术,如"彗星"异步消息传递.找到Juggernaut,唯一的问题是它使用Flash和自定义端口,这可能是一个问题,因为我的应用程序应该可以在企业防火墙和NAT后面访问.
4)我也在检查node.js框架,对于这种异步消息传递似乎是有效的,尽管Heroku不支持它.
哪种方法是实现此类功能的最有效方法?还有其他方法我没有想过吗?
感谢您的时间和帮助!
假设我正在同步HTML页面上的文本,存储在localStorage中,从计算机A到计算机B.当用户编辑计算机A上的文本时,我向服务器发送请求,并告诉它更改了哪些文本.有什么方法可以让服务器告诉计算机B有新文本,没有计算机B必须继续检查?我读过有关Comet的内容,但我正在尝试不使用任何库.有办法吗?另外,如果你要推荐Comet,你能举一个使用普通JavaScript和Comet的简单例子吗?
我有个主意,但我不知道它是否有效.在计算机B上,我发送一次请求,让服务器的文件继续延迟响应,直到有一些新文本.这样,它就像长轮询,但请求最终会超时.如果有一种方法可以将超时设置为永远,那么这将变得更加容易.那么,任何人都有任何想法?
PS-我想只使用JavaScript和PHP,并尝试避免使用库.尽管如此,如果您知道可以使用JS和PHP执行此操作的库,请告诉我.
此外,我知道有这样的问题,但我发现那里的答案并不令人满意.
哦,如果有人知道这里的聊天是如何工作的,你能告诉我吗?
tl; dr:我想从服务器向HTML页面发送请求,或者让HTML发送一个请求,该请求保持活动状态直到创建适当的响应.
我想为我的网站实现聊天系统.功能将与Facebook聊天非常相似.聊天将是一对一的.
我知道如何使用PHP,MySql和使用JQuery构建聊天系统.但我担心的是,从长远来看,它不会扩展到大量用户.
使用JQuery我会每秒发出一次请求以保持聊天窗口的更新,或者用户是否正在发送与其他用户聊天的请求.这将导致服务器上的额外负载,因为用户群将增加加班时间.
我被告知使用PHP这不是一个理想的解决方案,我应该研究彗星编程,这是我以前从未尝试过的.
我的问题是,我可以使用任何预构建框架,还是构建它的更好方法?
我听说过NodeJs和APE,但我的服务器不支持这些.
多谢你们.
编辑:在与我的服务器人员谈话后,我可能会更改我的操作系统,以便我可以运行NodeJS.nodejs的可伸缩性有多好,它能满足我的需求吗?
几天来,我一直在试验我的网站的长轮询/彗星实施.我得到了它如何工作的基本概念,这是我运行一些测试的地方.
另一方面,我一直在观察(firebug)gmail和facebook如何实现长轮询.我在gmail中注意到的是ajax请求在当前请求到期后不会继续跟进,但是在它触发下一个请求之前等待几秒/分钟.
我玩了一些.我尝试使用firefox中的gmail帐户A和Chrome中的gmail帐户B登录.我在当前的ajax民意调查结束时等待,然后我从账户B发送了一封电子邮件给A.我希望账户A在下次投票之前不会收到它,但令我惊讶的是账户A在我点击之后直接收到它提交按钮.
gmail如何通过长轮询进行此操作?
如果您尝试访问我的站点并单击"运行"按钮并打开firebug,则可以看到ajax微调器始终在运行.当服务器响应数据时,它再次请求服务器.
我将为彗星编程开发一个框架,我不能使用Web套接字或服务器发送事件(因为浏览器支持真的很糟糕).因此,我需要保持HTTP连接的活动状态,并将分块数据发送回客户端.
但是,当您进入工作时,问题就出现了:
xhr.responseText,同时xhr.readyState为3.iframe无用,因为浏览器在我将数据发送回客户端时显示加载器.但是,当我查看Lightstreamer演示页面时,我看到它一点一点地将JavaScript文件发送回客户端,并且在每一步中,它都会调用该函数并且该函数只是被执行(我不能这样做)部分).似乎Lightstreamer使用AJAX,因为请求只是出现在Firebug的控制台选项卡中,但它也像IE中的魅力一样.
我试图使用他们在请求中设置的每个HTTP头字段,但没有结果.我也尝试使用HTTP Post而不是HTTP Get,但仍然没有结果.
我已经阅读了近20篇关于如何实施彗星的文章,但是没有一篇文章可以解决我遇到的问题:
有人可以帮忙吗?我认为应该有一个非常小的提示或技巧,我不知道在这里将所有概念粘合在一起.有谁知道lightstreamer会做些什么来克服这些问题?
基本上,我试图从头开始使用node.js建立一个基本的彗星服务器和客户端.一个尝试谷歌的事情它应该工作的过程,因为我正在测试它似乎工作正常.然而,一个问题仍在我脑海中.首先,我想向您展示代码.
var http = require('http');
var sys = require('sys');
var fs = require('fs');
var qs = require('querystring');
var server = http.createServer();
var connections = [];
server.on('request', function(req, res) {
console.log(req.url);
if(req.url == '/index') {
fs.readFile(__dirname + '/index.html', function(err, data){
if(err) {
res.writeHead(err, data);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
} else if(req.url == '/sendData') {
if (req.method == 'POST') {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function () {
var POST …Run Code Online (Sandbox Code Playgroud) comet ×10
ajax ×7
javascript ×6
node.js ×2
php ×2
reverse-ajax ×2
facebook ×1
heroku ×1
http ×1
jquery ×1
long-polling ×1
mysql ×1
streaming ×1
ws-i ×1
xmpp ×1