最近我一直在尝试使用这个插件在 Ngnix 服务器上为我的应用程序设置一个彗星服务器:https ://github.com/wandenberg/nginx-push-stream-module
由于 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"})'
});
我试图让它跨域工作,但是即使在同一个域上我也无法让它工作,实际发生的是:
当我使用接收代码时,它会启动与服务器的连接并按预期进行无休止的加载,然后我尝试使用发送者代码响应长轮询。
现在在 NET 选项卡(萤火虫)上的控制台中,我可以看到,一旦我发送 POST,它就会在响应中以纯文本形式接收它,但仍然保持连接而不给出回调!因此,如果我反复发送帖子,我可以在 net response 选项卡中的 firebug 中看到他们正在收集,但接收者函数没有给出回调!因此我无法准确提取数据!
现在我在另一个域和同一个源域中都尝试了这个,所以我认为这里的策略不是问题,问题是 jquery 片段永远不会到达回调,尽管它确实在请求后到达回调仅限超时!请帮忙。
附带说明一下,如果您认为 NGINX 有一个更适合我的替代插件,请告诉我。