在Nginx HTTP PUSH上会话/授权彗星

时间:2010-07-27 05:55:24

标签: php ruby gwt nginx comet

HTTP PUSH的Nginx方法相对简单。有3方涉及:订户(接收方),发布方(发送方),服务器本身充当组播服务器。

Nginx还可以分成不同的频道,用户可以访问不同的频道ID。

但我仍然不知道如何仅为登录用户授权/限制内容,或者只发送该用户所需的数据,而不是将其多播到任何知道频道ID的人。

如果可能,是否仍然只使用频道并有选择地向用户发送数据?

目前我在同一个数据库上运行,但发件人使用nginx在ruby中编写,前端使用PHP / GWT编写。

非常感谢

2 个答案:

答案 0 :(得分:1)

这是我的设置: >

              location = /broadcast/sub {
                   default_type  text/json;
                  set $push_channel_id $arg_channel;
                  push_subscriber;
                  push_subscriber_concurrency broadcast;
                  push_channel_group broadcast;
              }

              location = /broadcast/pub {
                  set $push_channel_id $arg_channel;
                  push_publisher;
                  push_min_message_buffer_length 5;
                  push_max_message_buffer_length 20;
                  push_message_timeout 10s;
                  push_channel_group broadcast;
              }

I send new messages with curl

    $ch = curl_init($pub_url);
    $data = array('status' => $message);
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:
text/json"));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $return = curl_exec($ch);
    curl_close($ch);

Thanks for any hints...

答案 1 :(得分:1)

也许您可以使用我的http_push_module模块的分支,它实现了对通道的细粒度安全访问。它为通道和每个客户端IP /每通道安全性提供了到期时间(如果需要,还可以添加jsonp支持,作为加号):

https://github.com/Kronuz/nginx_http_push_module

使用该模块,您可以为您的登录用户提供有效的密钥(甚至可以过期,或者只使用FFFFFFFF作为过期日期,因此它永不过期)并且可以根据您的访问权限进行限制,甚至通过使用其中嵌入密钥的IP地址来“打开”通道。我希望这会有所帮助。