misultin — легкий встраиваемый веб-сервер на Erlang

    image Этим летом в полку легких веб-серверов на Эрланге прибыло. Roberto Ostinelli опубликовал свою разработку — misultin. Это библиотека для создания легких быстродействующих HTTP-серверов. В этом плане проект напоминает mochiweb, но акцент еще больше сделан на скорость. По тестам автора misultin обгоняет mochiweb примерно на 50-60% при одновременной работе с 100-200 клиентами.
    Функциональность пока беднее, но присутствуют базовые вещи для создания сервисов: отправка простых ответов, файлов, поддержка RESTful, удобная отправка ответов по частям (стриминг). Автор планирует далее развивать проект добавлять новые возможности.

    Коллеги, возмножно, кто имел дело с данной библиотекой? Какие отзывы?

    >-|-|-(°>
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 32
    • –26
      >веб-сервер
      >Erlang
      как говорится, «ололошеньки ололо»
      • +5
        Эээм… А можно чуть подробнее?
        • +4
          матешу сделал?
          • 0
            Чем вам не нравится сочетание этих двух слов?
          • 0
            а что означает эта рыбина?
            • +5
              а. уже дошло.
              рыбина обозначает рыбину.
              • 0
                вы совершено правы!
                это лого :)
                • +1
                  у меня поначалу возникли ассоциации с perl-artом,
                  и заподозрился тайный смысл в этом сочетании символов.
              • +1
                Так нечестно вообще. Эта рыбина слишком похожа на мой аватар.
                • 0
                  Только плывет в другую сторону :)
              • 0
                хм… а yaws что никому не нравиться или как?
                • 0
                  не yaws-ом единым живет мир Эрланга :)
                  • +1
                    нуда :) разнообразие это хорошо :) просто явс уже в продакшене проверен :)
                    • 0
                      Угу. Но мисултин предполагается как более простой и легкий.
                      • 0
                        Я пытался пользоваться- падает он. Непонятно почему.
                        • 0
                          На чем падает?
                          Какие ошибки? Какая версия?
                    • 0
                      yaws мне кажется большой и сложный c кучей функциональности
                    • +1
                      просвятите кто нибудь: где это можно применить?
                      • 0
                        Например, для создания нагруженных REST сервисов.
                        Благодаря особенностям синтаксиса Эрланга, определение УРЛа получается очень красивым:

                        % handle a GET on /
                        handle('GET', [], Req) ->
                        Req:ok(«Main home page.»);

                        % handle a GET on /users
                        handle('GET', [«users»], Req) ->
                        Req:ok(«Main users root.»);

                        % handle a GET on /users/{username}
                        handle('GET', [«users», UserName], Req) ->
                        Req:ok(«This is ~s's page.», [UserName]);

                        % handle a GET on /users/{username}/messages
                        handle('GET', [«users», UserName, «messages»], Req) ->
                        Req:ok(«This is ~s's messages page.», [UserName]);

                        % handle the 404 page not found
                        handle(_, _, Req) ->
                        Req:ok(«Page not found.»).
                        • 0
                          Не особенностям синтаксиса Эрланга, а паттерн матчингу. В Scheme примерно так же.
                          • 0
                            (define-values (users-dispatch users-url)
                              (dispatch-rules
                               [("") (λ (req) "Main home page.")]
                               [("users") (λ (req) "Main users root.")]
                               [("users" UserName) (λ (req UserName) (string-append "This is " UserName "'s page"))]
                               [("users" UserName "messages") (λ (req UserName) (string-append "This is " UserName "'s messages page"))]
                               [else (λ (req) "Page not found.")]))
                            • +1
                              Соглашусь. Это паттерн-матчинг, характерный для функцональных языков.
                        • 0
                          > В этом плане проект напоминает mochiweb

                          по-моему он вообще напоминает mochiweb :)
                          • –3
                            Лучше ngnix пока не встречал. Даже одноклассники снимает шляпу перед Cысоева
                            • +2
                              Весь нагруженный рунет работает на nginx :) И даже запад приобщается :)
                              Но это разные проекты: nginx — в первую очередь статика и прокся, misultin — для днамическоего конента, напр REST сервисов.
                              • 0
                                Использование nginx совершенно не исключает использование другого ПО. Я бы даже сказал, что бэкэндовые апстримы только приветствуются.
                              • 0
                                смущает, немного неуклюжая, работа со строками и не полная поддержка юникода.
                                Все самые высокопроизводительные «места» выполнены на с++. Все классы http это подтверждают. Система паралельных процесоов и супервизора — весьма кошерна. Но работа со строками сильно огорчает. чОрт :)

                                Но, это функциональны язык. И как функциональный язык — он хорош.
                                • 0
                                  Да, строки сделаные довольно странно. Меня самого это удивляет и приходится с этим бороться.
                                  В сетевом сервисе большее внимание придется уделить скорости и надежности, чем удобству работы со строками. Чаще всего их нужно будет просто копировать с одного места в другое, может шаблоны какие-то обрабатывать.
                                  • 0
                                    Меня смутило то, что на один символ в строке, erlang тратит 8 байт. И если, допустим, просто вывод строки в UTF происходит без проблем, то операции изменения регистра и еже с ней сложные преобразования нужно писать самому.
                                    Для мне окончательным аргуементом стало использование памяти при работе со строками. Если бы не это — писать мне распределенные много-нодовые вэб морды :) и бэк-энды к ним.

                                    Для реализации серьезных функциональных алгоритмов — думаю решение идеальное. Многопоточность и контроль процессов реализованы как нигде.
                                    • 0
                                      Для большинства строк можно использовать binary — очень компактно.
                                      • 0
                                        Хочу написать крутой балансер на этой штуке!

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.