Habrachat или использование ARM сервера

    В прошлый раз я запустил свой сайт на 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 сервер.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 36

      +3
      XSS там быстро обнаружился, вёрстку поломали ещё быстрее… =)
      Но в целом — весело, вспоминаются старые-добрые времена прикручивания к каждому сайту гостевой книги и чатика…
        +1
        XSS там быстро обнаружился, вёрстку поломали ещё быстрее… =)

        Как бы его прикрыть бы… а с вёрсткой починим.

        Но в целом — весело, вспоминаются старые-добрые времена прикручивания к каждому сайту гостевой книги и чатика…

        Ну гостевуха не очень нужна, но вот чата мне в последнее время не хватает.
          +2
          Заменил bbcode на postmarkup, там так просто XSS вроде не получить.
            +1
            Для вёрстки то же вроде защиту сделали.
            +1
            А это… Можно по-человечески сверху вниз читать или только так?
              0
              Будет опция.
                +1
                A: Because it messes up the order in which people normally read text.
                Q: Why is top-posting such a bad thing?
                A: Top-posting.
                Q: What is the most annoying thing on usenet and in e-mail?

                +3
                >>>Авторизуйся, чтобы войти.
                Аргх! Сделайте авторизацию через хабрааккаунт тогда уж.
                0
                А это нормально, что там пусто? Причём даже если я сам напишу…
                Если что Chromium 34.0.1847.92 (259401)
                Скрин:

                  0
                  То же самое у меня. Вижу три хаба и всё. Подумал, что noscript зарезал лишнего, но нет — в chromium аналогичная картина.
                    0
                    аналогично, Chromium
                      0
                      то же, safari
                      0
                      Странно, что то случилось пока ехал домой. Но сейчас всё ок, само — так что может быть сеть тупила.
                        0
                        Например у меня через прокси так же отображается, если его выключить то нормально.
                          0
                          Вебсокеты не работают через прокси.
                        0
                        Полчаса не прошло, а уже сломалось.
                          0
                          А я успел глянуть пока не сломалось, довольно милый чат. Не хватает адаптивности верстки при таком простом интерфейсе, но все-же в целом задумка очень понравилась.
                            0
                            Казалось бы, причем здесь DJ Hero?
                              +1
                              действительно, тем более что на картинке изображена Beatmania. Автор, гоу в аркаду ;)
                                0
                                Я ddr люблю. А картинка просто для привлечения внимания. У меня на сайте много чего ещё есть…
                                  0
                                  ну ниче, ежа голой жопой не напугать, ддр так ддр :)
                                  буду завтра на Южке с 6 до 8 вечера, забегай)
                              +1
                              а зачем новые сообщения сверху? (и второй вопрос, но ответом на него является первый: а зачем оно дергается при добавлении нового сообщения когда я смотрю середину?) :)
                                0
                                Исходники открыты — можете поправить.
                                +7
                                Открыл habrachat.org — «Авторизуйся чтобы войти» — закрыл habrachat.org.
                                  0
                                  Вход только по паспорту! Вы разве не читали последние посты на хабре? ;)
                                    0
                                    Раз уж на то пошло, то я свои приватные данные постараюсь не доверять сервису, который не знает разницы между идентификацией, аутентификацией и авторизацией.
                                  0
                                  Без авторизации через TMID это будет ещё одно сборище попрошаек инвайтов =( А так идея хорошая=)
                                    0
                                    А зачем такая строгость?
                                      0
                                      Всмысле строгость?
                                      0
                                      Увы они не дают API.
                                        0
                                        Вы хорошо попросите) Хабра-АДМ получил ведь) Создайте опросик будут ли пользоваться чатиком) И если сообщество поддержит постучитесь в ЛС к администрации, и я думаю всё сложиться хорошо)
                                          0
                                          Идея хорошая. Но для начала надо всё же обширный TODO выполнить. От концепта теста ARM сервера нужно перейти к удобному инструменту общения.
                                            0
                                            Ну тут вы правы, но я думаю что у вас всё выйдет, я малоопытный, так что помочь могу врятли, хотя и хотел бы)
                                              0
                                              Опыт дело наживное, так что смело пробуйте! Исходники на github смотрите, правьте и кидайте патчи.

                                    Only users with full accounts can post comments. Log in, please.