Сессия / авторизация кометы на Nginx HTTP PUSH - PullRequest
0 голосов
/ 27 июля 2010

Подход Nginx к HTTP PUSH относительно прост. В нем участвуют 3 участника: подписчик (получатель), издатель (отправитель) и сам сервер, выступающий в качестве сервера многоадресной рассылки.

Nginx также может разделяться на разные каналы с разными идентификаторами каналов, к которым пользователь может получить доступ.

Но я до сих пор не знаю, как авторизовать / ограничить контент только для вошедшего в систему пользователя или отправить только данные, необходимые этому пользователю, вместо многоадресной передачи всем, кто знает об идентификаторе канала.

Если возможно, можно ли в любом случае использовать только канал и выборочно отправлять данные пользователю?

В настоящее время я работаю в той же базе данных, но отправитель записывается в ruby ​​с использованием nginx, а внешний интерфейс пишется с использованием PHP / GWT.

Большое спасибо

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Может быть, вы можете использовать мой форк модуля http_push_module, он реализует точную защиту доступа к каналам. Он обеспечивает время истечения для каналов и IP-безопасность каждого клиента / безопасность канала (дополнительно он добавляет поддержку jsonp, если вам это нужно, как плюс):

https://github.com/Kronuz/nginx_http_push_module

Используя модуль, вы можете дать вашим зарегистрированным пользователям действительный ключ для использования (срок действия которого может даже истечь, или просто используйте FFFFFFFF в качестве даты истечения срока действия, чтобы он никогда не истекал) и были настолько ограничены, насколько вы хотите, с их доступом даже используя свой IP-адрес, встроенный в ключ, чтобы «открыть» канал. Надеюсь, это поможет.

1 голос
/ 02 августа 2010

Это мои настройки: >

              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...
...