Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sademidenko/c3a34d728207ed1b8e5da95edd428d5b to your computer and use it in GitHub Desktop.
Save sademidenko/c3a34d728207ed1b8e5da95edd428d5b to your computer and use it in GitHub Desktop.
Дополнительные функции [nginx + tornado]
Take a look at your feet
Bones! Bones! Bones, bones, bones, bones!
@sademidenko
Copy link
Author

sademidenko commented Dec 10, 2017

Зачем?
Решаем проблему C10K

Для реализации уведомлений будем использовать nginx-push-stream-module + tornado.

Сборка nginx

Проверим версию нашего nginx, после сборки она должна стать 1.2.0

[da@controller.sdemidenko nginx-1.2.0]$ nginx -v
nginx version: nginx/1.10.3

Для начала, нам необходимо собрать nginx пакет с этим модулем

# клоним репозиторий
mkdir -p /tmp/nginx
cd /tmp/nginx/
git clone https://github.com/wandenberg/nginx-push-stream-module.git
NGINX_PUSH_STREAM_MODULE_PATH=$PWD/nginx-push-stream-module

# get desired nginx version (works with 1.2.0+)
wget http://nginx.org/download/nginx-1.2.0.tar.gz
    
# распаковка, конфигурация и сборка
tar xzvf nginx-1.2.0.tar.gz
cd nginx-1.2.0
./configure --add-module=../nginx-push-stream-module

Если во время этого этапа у нас будет ошибка вида:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

Её решение можно найти тут
После чего, мы должны получить OK

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1: using system crypto library
  + using system zlib library

Продолжим сборку с нашим модулем, но всегда помните o make

make

# установка
sudo make install

# проверка
sudo /usr/local/nginx/sbin/nginx -v
    nginx version: nginx/1.2.0

# тестовая конфигурация
sudo /usr/local/nginx/sbin/nginx -c $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf -t
    the configuration file $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf syntax is ok
    configuration file $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf test is successful

Ошибка poll

[da@controller.sdemidenko nginx-1.2.0]$ sudo /usr/local/nginx/sbin/nginx -c $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf -t
nginx: [emerg] invalid event type "poll" in /tmp/nginx/nginx-push-stream-module/misc/nginx.conf:19
nginx: configuration file /tmp/nginx/nginx-push-stream-module/misc/nginx.conf test failed

Легко решается заменой poll -> epoll

 17 events {
 18     worker_connections  1024;
 19     use                 epoll;
 20 }

Запуск нашего nginx

sudo /usr/local/nginx/sbin/nginx -c $NGINX_PUSH_STREAM_MODULE_PATH/misc/nginx.conf

Мы закончили со сборкой пакета, теперь можем перейти к настройке conf файлов для него.

Настройка nginx

Пример файла настроек для nginx можно найти в этом коммите, рассмотрим основные настройки модуля которые можно изменить для себя.

Воспользуемся примером в документации для реализации этого примера.

Рассмотрим пример с tornado

Пример реализации сервера

Основные методы, которые необходимо изменить для работы с WS

      class EchoWebSocket(tornado.websocket.WebSocketHandler):
          def open(self):
              print("WebSocket opened")

          def on_message(self, message):
              self.write_message(u"You said: " + message)

          def on_close(self):
              print("WebSocket closed")

Рассмотрим реализацию через JS

Пример запуска tornado

[da@controller.sdemidenko push_tornado]$ pwd
/tmp/ask_sdemidenko/push_notifications/push_tornado
[da@controller.sdemidenko push_tornado]$ python application.py 

Создать новое сообщение

curl http://controller.sdemidenko.notkube.dev.ivi.ru:8888/publish/ -d "msg=Hello&uid=tp_test_01"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment