标签: comet

nginx代理到彗星

我需要一些linux大师的帮助.我正在开发一个包含彗星服务器的webapp.彗星服务器在localhost:8080上运行并公开url localhost:8080/long_polling以供客户端连接.我的webapp在localhost:80上运行.

我已经使用nginx代理从nginx到彗星服务器的请求(localhost:80/long_polling代理到localhost:8080/long_polling),但是,我有两个抱怨这个解决方案:

  1. 一分钟后,nginx给了我504网关超时,即使我将每次设置更改为600秒
  2. 我真的不希望nginx必须代理到彗星服务器 - nginx代理不是为持久连接而构建的(可能长达半小时).我宁愿允许客户端直接连接到彗星服务器,让彗星服务器处理它.

所以我的问题是:是否有任何linux技巧允许我在不使用nginx代理的情况下将localhost:8080/long_polling暴露给localhost:80/long_polling?一定有东西.这就是为什么我认为这个问题可能是linux大师最好的答案.

我需要/ long_polling在端口80上公开的原因是我可以使用AJAX连接到它(ajax same-origin-policy).

这是我的nginx proxy.conf供参考:

proxy_redirect              off;                                                                                                                         
proxy_set_header            Host $host;
proxy_set_header            X-Real-IP $remote_addr;
proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size        10m;
client_body_buffer_size     128k;
proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
proxy_buffer_size           4k;
proxy_buffers               4 32k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;
send_timeout                600;
proxy_buffering             off;
Run Code Online (Sandbox Code Playgroud)

comet nginx

15
推荐指数
3
解决办法
1万
查看次数

跨浏览器实现"HTTP Streaming"(推送)AJAX模式

客户端请求来自服务器的网页.然后Clent要求进行额外的计算; 服务器执行一系列计算并在可用时立即发送部分结果(文本格式,每行包含单独的完整项目).客户端使用服务器提供的信息更新网页(使用JavaScript和DOM).

这似乎适合Ajaxpatterns站点的HTTP Streaming(当前版本)模式.

问题是如何以跨浏览器(浏览器不可知)的方式进行,最好不使用JavaScript框架,或使用像jQuery这样的轻量级框架.

问题始于以跨浏览器方式生成XMLHttpRequest,但我认为主要项目是并非所有浏览器都能onreadystatechangeXMLHttpRequest正确实现; 并非所有浏览器都onreadystatechange在每个服务器刷新上调用事件(顺便说一下.如何在CGI脚本中强制刷新服务器(在Perl中)?).Ajaxpatterns上的示例代码通过使用计时器处理此问题; 如果我发现部分响应,我应该丢弃定时器解决方案onreadystatechange吗?


添加11-08-2009

当前解决方案:
我使用以下函数创建XMLHttpRequest对象:

function createRequestObject() {
        var ro;
        if (window.XMLHttpRequest) {
                ro = new XMLHttpRequest();
        } else {
                ro = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (!ro)
                debug("Couldn't start XMLHttpRequest object");
        return ro;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用一些(最好是轻量级)JavaScript框架,比如jQuery,如果用户选择不安装jQuery,我希望有后备.

我使用以下代码启动AJAX; setInterval因为某些浏览器onreadystatechange仅在服务器关闭连接后调用(可能需要长达数十秒),而不是在服务器刷新数据(大约每秒或更多次)之后调用.

function startProcess(dataUrl) {
        http = createRequestObject();
        http.open('get', dataUrl);
        http.onreadystatechange = handleResponse;
        http.send(null);

        pollTimer = setInterval(handleResponse, 1000);
}
Run Code Online (Sandbox Code Playgroud)

handleResponse功能是最复杂的一个,但它的草图如下所示.可以做得更好吗?如何使用一些轻量级JavaScript框架(如jQuery)?

function handleResponse() …
Run Code Online (Sandbox Code Playgroud)

javascript ajax streaming comet xmlhttprequest

14
推荐指数
1
解决办法
2万
查看次数

使用NSURLConnection进行长轮询

我正在开发一个iPhone应用程序,它将使用长轮询通过HTTP将服务器的事件通知发送到客户端.在服务器上打开连接后,我发送了一小部分代表事件的JSON.我发现-[NSURLConnectionDelegate connection:didReceiveData]直到我关闭连接后才会调用,无论我在创建时使用的缓存设置如何NSURLRequest.我已经验证了服务器端正在按预期工作 - 第一个JSON事件将立即发送,后续事件将在发生时通过线路发送.有没有办法在NSURLConnection发生这些事件时使用它们,或者我需要转而使用CFSocket API?

我正在开始集成CocoaAsyncSocket,但是NSURLConnection如果可能的话,我更愿意继续使用它,因为它更适合我基于REST/JSON的其余Web服务结构.

iphone comet objective-c

14
推荐指数
1
解决办法
5680
查看次数

GMail如何实施Comet?

在HttpWatch的帮助下,我试图找出GMail如何实现Comet.

我使用两个帐户登录GMail,一个在IE中,另一个在Firefox中.在GMail中使用"WASSUP"等一些神奇的词语在GMail中聊天.然后,我注销两个GMail帐户,过滤任何http内容而不使用"WASSUP"字符串.结果显示哪个HTTP请求是流式传输通道.(注意:我必须注销.否则,永无止境的HTTP不会在HttpWatch中显示内容.)

结果很有趣.流通道的URL如下:

https:// mail/channel/bind?VER = 8&at = xn3j33vcvk39lkfq .....

毫无疑问,GMail使用IFRAME进行IE浏览.Http内容以" <html><body>" 开头.

最初,我猜测GMail在Firefox中使用多部分XmlHttpRequest进行Comet.令我惊讶的是,响应标头没有"multipart/x-mixed-replace"标头.响应标头如下:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Sat, 20 Mar 2010 01:52:39 GMT
X-Frame-Options: ALLOWALL
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
Server: GSE
X-XSS-Protection: 0
Run Code Online (Sandbox Code Playgroud)

不幸的是,HttpWatch不会告诉HTTP请求是否来自XmlHttpRequest.内容不是HTML而是JSON.它看起来像是对XHR的响应,但是如果没有multipart/x-mixed-replace,这对Comet不起作用,对吗?

还有什么办法可以弄清楚GMail如何实现Comet?

更新: 经过进一步调查,我相信GMail以这种方式实现了Comet:1)在IE中,它使用了forever-hidden-iframe; 2)在Firefox中,它使用forever-XHR而不使用multipart/x-mixed-replace标头.客户端将在条件(readyState == 3)OR(readyState == 4)中响应.也就是说,处于交互状态和完整状态.

gmail comet httpwatch

14
推荐指数
1
解决办法
4036
查看次数

编写聊天应用程序

我想知道为数千名用户编写聊天应用程序代码的正确方法是什么.

我只是困惑如何能够每秒使用AJAX ping服务器或者更少,并检查MySQL中是否有新记录,服务器负载量是否可接受.

我目前正在考虑使用jQuery,PHP和MySQL进行编码.

请指教.非常感谢您的帮助.

javascript php jquery comet node.js

14
推荐指数
1
解决办法
3381
查看次数

AJAX轮询频率 - 长期民意调查还是不长期民意调查?

我正在构建一个需要相对不变的数据库轮询的网页组件.我可以看到两种不同的方法,我想知道其中一种是否比其他方法更好,或者我是否缺少第三种选择.

1)每隔1或2秒发送一次AJAX请求以检查更新.无论是否有新数据,每个请求都会立即返回.
2)触发单个AJAX请求,该请求在收到数据或发生超时之前不会返回.在其中任何一个发生时,它会触发下一个请求.(我认为这叫做长轮询?)

数据库查询的数量与之相同,但使用#2,从浏览器发出的请求将减少,这可以节省带宽和客户端资源.对于服务器,最好让一个PHP请求保持活动状态并在查询之间休眠,或者每隔几秒触发一次,轮询数据库,然后关闭?或者没有区别,我对此太过强调了?

编辑:我想我还应该声明这是一个更大的网络应用程序的聊天小部件.通信的轻微延迟不会杀死用户,因为聊天是次要功能.

php ajax performance comet long-polling

14
推荐指数
1
解决办法
4621
查看次数

Play!的Comet如何支持工作?

我看到Akka模块的描述说Play有很好的Comet支持,但我之前从未使用过Comet,我在Play的文档中找不到任何提及它的内容.它在Play中如何运作?


我花了几个小时两天来搞清楚这一点,所以我想与其他Play初学者分享这些信息.

comet playframework

14
推荐指数
2
解决办法
6352
查看次数

烧瓶架可以从服务器向客户端浏览器发送实时数据吗?

我想知道如何(如果有的话)烧瓶执行长轮询,因此服务器可以通过连接发送数据到客户端.例如,如果服务器通过流式api接收到Twitter提要,那么它将如何传递给客户端浏览器?

我知道你不能在这种情况下使用flask.flash.

谢谢

谢谢你的例子.我查看了这些示例,当我尝试为我的代码实现它时,它仍然没有在客户端浏览器中提供实时输出.

我使用juggernaut和redis将它基于烧瓶片段().这是我的python代码:

import flask
from flask.views import MethodView
from tweetStreamsRT import StreamerRt 
from juggernaut import Juggernaut


app = flask.Flask(__name__)
app.secret_key = "xxxxx"
PORT = 8080

class View(MethodView):

    def get(self):
        return flask.render_template('index.html')

    def post(self):
        results = StreamerRt().filter(track=[flask.request.form['event']])            
        jug = Juggernaut()
        jug.publish('channel', results)
        return self.get()


app.add_url_rule('/', view_func = View.as_view('index'), methods=['GET', 'POST'])
app.debug = True

if __name__ == "__main__":
    print 'Listening on http://localhost:%s' % PORT
    app.run()
Run Code Online (Sandbox Code Playgroud)

我的html页面是继承自基本html页面的:

{% extends "base.html" %}
{% import "forms.html" as forms %}


{% block page_header …
Run Code Online (Sandbox Code Playgroud)

python web-applications comet juggernaut flask

14
推荐指数
1
解决办法
2万
查看次数

13
推荐指数
1
解决办法
6389
查看次数

Python + Tornado vs Scala + Lift?

我正在寻找一个基于谷歌地图的网络应用程序.我最初的想法是,在第一阶段,重点应放在前端,后端应该易于编写和原型,并应尽可能地帮助前端的发展.

没有"经典"页面,只有meebo.com风格的界面.javascript + jquery.(意思是,如果没有静态页面,则很少).

我的眼睛已经抓住了彗星风格的服务器推送范例,我真的很有兴趣用这个做一些概念证明.

您是否有任何建议或优缺点或使用经验:

Python + Tornado vs Scala + Lift

Web应用程序的其他方面还有哪些优点或缺点可供选择?

注意:这适用于最多2位开发人员,而不是大型分布式和变更团队.

谢谢

python scala comet tornado lift

13
推荐指数
2
解决办法
3529
查看次数