Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Habrachat либо применение ARM сервера

Anna | 15.06.2014 | нет комментариев
В прошлый раз я запустил свой сайт на ARM сервере от хостера GlobalTel, а сейчас решил написать план с 0 для этого сервера.
Получилось вот это: habrachat.org. Маленькие подробности под катом.


Мотивация

  • Хотелось загрузить ARM сервер чем то лёгким, такой задачей где непотребны были бы сильные ядра x86. По этому предпочел асинхронный сервер tornado и классическую задачу чат.
  • Я не видел чата для habrahabr. Есть IRC но я там бываю всё поменьше и поменьше, и людей там вижу реже.
  • Я не нашёл готового, простого чата на tornado redis с помощью комнат. В целом для этой связки и tornado в частности, примеров завершенного чата дюже немного. Помимо того эти чаты не могли трудиться сразу на нескольких ядрах (только один инстанс).

Реализация

  • Компоненты взял примитивные nginx (WebsocketProxy), Tornado(WebSocket), tornado-redis, Redis. На заказчике bootstrap dojo.
  • Авторизацию реализовал через сервис ulogin для скорости разработки. Да и в целом комфортный сервис.
  • Форматирование текста реализовал через bbcode библиотеку для python.
  • Вначале сделал всё за один день и довольно легко (где то 300 строк), но работало только в одном экземпляре. Когда решил сделать синхронизацию между инстансами — меня понесло. В результате код разросся до 540 строк.
  • Если передача сообщений пользователю довольно простая задача и всюду описана, то вот передача сообщения соседнему «чату» (инстансу) теснее труднее. Всякий «чат» я подписываю в redis на один и тот же канал, причём в отдельном коннекте (так как это блокирующая операция). При включении всякий «чат» шлёт просьбу осведомить всех своих пользователей, все кто получает это сообщение так же каждому отсылают свои списки. В последующем сделанное сообщение я отправляю не только пользователям определенного «чата» но и в каждому остальным «чатам» где работает особая callback функция. Деталей там много, отменнее сразу глядеть код.
  • Сам код github.com/stalkerg/habrachat. Ошибок там много, много не прекрасных подходов так, что если найдёте то пиши на гитахб либо пушите патчи (писал в спешке и на итог). Помимо того если идея понравится то буду развивать.

Дополнение

  • Ядро Ubuntu для ARM собрана только с базовым комплектом netfilters из-за чего невозможно даже прокинуть порт. В результате я собирал из исходников nginx и проксировал WebSocket на нём. :(
  • Незадолго у GlobalTel была авария и позже отключения света, у сервера время сбилось в 0 т.е. 73 год. Вероятно у ARM с этим задачи. Я длинно гадал отчего у меня ssl глючит всюду где только дозволено.

PS если реально кому то это будет необходимо, то сервис будет обрастать фичами и прочим, а костыли будут убираться. Пишите в комментариях ваши пожелания.
PS2 верю програ результат не обронит бедный 4 ядерный ARM сервер.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB