最近我一直在试图建立我使用这个插件一个Ngnix服务器上的应用程序彗星服务器:https://github.com/wandenberg/nginx-push-stream-modulenginx的彗星长轮询与jQuery
由于GNU/GPL的约束性,我无法使用随插件提供的JS,所以我试图使用jquery ajax请求自己实现它。
我的Nginx的配置是这样的:
location /channels-stats {
# activate channels statistics mode for this location
push_stream_channels_statistics;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# query string based channel id
set $push_stream_channel_id $arg_id;
}
location ~ /pub/(.*) {
# activate publisher (admin) mode for this location
push_stream_publisher admin;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# query string based channel id
set $push_stream_channel_id $1;
}
location ~ /sub/(.*) {
# activate subscriber (streaming) mode for this location
push_stream_subscriber;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# positional channel path
set $push_stream_channels_path $1;
}
和代码段,我试图用(萤火虫)来测试这两种方式通信:
//reciever
$.ajax({
url:'sub/test?callback=mycallback',
dataType:'json',
success:function(data){
console.log(data);
}
});
//sender
$.ajax({
url:'pub/test',
dataType:'json',
type:'POST',
data:'mycallback({"J":5,"0":"N"})'
});
我想使其工作跨域,但我无法设法让它工作,即使在同一个域上,发生什么acctualy是:
当我使用接收代码,它启动连接到s并且正在无休止地加载,因此我尝试用发送者代码来响应长轮询。
现在在.NET选项卡(firebug)的控制台上我可以看到,一旦我发送POST,它会以纯文本的形式在响应中收到它,但仍然保持连接而不会回拨!所以如果我反复发送帖子,我可以看到他们正在收集的网络响应标签中的萤火虫,但没有从接收器功能给出回调!因此我无法提取数据!
现在我试着这两个在另一个域和相同的原产地域,所以我认为这个政策不是问题在这里,什么问题是,jQuery的片段没有得到回调,虽然它确实达到回调一次请求超时! 请帮忙。
在旁边注释,如果你认为有一个替代插件NGINX这会更适合我请让我知道。