WaterSpout — веб сервер для асинхронной передачи данных

    Сегодня речь пойдёт об WaterSpout — веб сервере, способном обрабатывать websockets запросы, позволяя общаться в реальном времени между сервером и браузером используя websockets или long polling. Написан он на PHP.

    В первую очередь идёт проверка поддерживаются ли websockets (это Chrome, Опера и FF, если включим), если нет, то ничего страшного, будет использоваться long polling.
    Преимущества этой технологии: доставка сообщений мгновенна, высокая производительность. Тестировал в Chrome, FF, IE6+.
    Демка.

    Как запустить у себя?


    1. Скачать
    2. Запустить в командной строчке: php server.php
    3. Готово: http://localhost:7777/demos/locke (порт меняется в config/config.php)

    Требования к софту:


    PHP 5.2.1 или выше.
    Должны быть включены следующие экстеншены: mbstring, sockets, openssl (если хотите использовать ssl)

    Сравнение и применение:


    Сейчас обычно используется технология, при которой браузер посылает запросы к серверу через определённое количество времени. Такой подход либо требует пересылки одних и тех же данных (что ест ваш траффик), либо ответ приходит с задержкой, в зависимости от интервала обновлений. Используя же WaterSpout пользователи могут получить результат сразу же, как он пришёл на сервер.
    С помощью WaterSpout'а возможно делать браузерные многопользовательские игры, чаты, сервисы с мгновенным взаимодействием.
    Демка для сравнения технологии websockets, long polling и short polling.

    P.S. Если вас заинтересовала данная архитектура и хотите попробовать разработать что-то своё — не стесняйтсесь — пишите вличку, помогу всем чем смогу. Любые комментарии и замечания приветствуются.

    Полезные ссылки

    Слайды по теме
    Интеграция с Kohan'ой
    Поделиться публикацией

    Комментарии 41

      +4
      прикольно побегали :)
        +2
        В примере активная xss :)
          –2
          Да уж, запускать демку, преждевременно не проверив на такую банальную уязвимость…
          Невозможно нормально затестить, все время вылетают алерты. А ведь можно сделать что-нибудь похуже…
            0
            Блин, я показал один пример и началось… Зачем столько матов в мою сторону?
            0
            Уже притормаживает)))
              +4
              Чат зря прикрутили. Разочаровался в пользователях Хабра.
                +1
                В демке собрались «чоткие потцанчики».
                  +2
                  Крайне интересный проект. А Вы не хотели бы перевести его на github и подключить к разработке комьюнити?
                    0
                    Собирался, сейчас вот, как раз и смотрю, как он народу придётся.: )
                      0
                      Да Вы выкладывайте, а заинтересованные личности всегда найдутся. =)
                        0
                        Плюс один. С радостью помогу в меру своих возможностей.
                        +4
                        А почему вы спрашиваете об этом автора топика, а не Scott Mattocks и Chris Lewis — авторов проекта?
                          0
                          Странно, я думал что автор поста и есть соавтор проекта О_о, и доков то нет, все пока в тумане, попросил пока написать обзорную статейку с примерами — он вроде согласился, так что надеемся ситуация прояснится…
                        0
                        Очень интересно.
                        Скажите, а что за js движок карты с перемещениями? Самописный?
                          +5
                            0
                            Класс, спасибо большое!
                          +2
                          >pooling
                          polling
                            +1
                            Классная разработка!
                            Скажи как долго висит такой сервер без падения?
                              +1
                              Хорошая фишка, интересно сколько коннектов выдреживает. Скинул нашему дизайнеру, он такой мол что это такое. Где тут стрелять=) Интересная мысль))Кроме перемещения добавить, чтобы можно было стрелять)
                                +3
                                И как php-скрипт живёт без перезапуска? Сколько запросов в секунду обрабатывает? Хотелось бы услышать цифры, особенно по сравнению с phpDaemon (заранее спасибо).
                                  0
                                  public function on_finish_handshake_v76($data)

                                  вообще кода очень много, он плохо читается и воспринимается на глаз…
                                    0
                                    Планируется ли помимо select поддержка epoll, kqueue и т.д.?
                                    0
                                    Супер!
                                      0
                                      если нет желания разворачивать сервис у себя, можно воспользоваться pusher.com/
                                        0
                                        Я добавил тачку с пушкой. Короче управление стрелками. Стрелять — пробел
                                          0
                                          Кто не видит машинку — перелогинтесь. Пока я там — она будет висеть =)
                                          +2
                                          Блин. Реально вот хрень, пример на стока прикольный, именно тем что там XSS, что это рай для развленчения программистам =) Это же адддская игра ))) Мне работать надо, закройте сайт до вечера…
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                              +1
                                              поддерживает, если включить
                                              opera:config#UserPrefs|EnableWebSockets
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  –1
                                                  Я может плохо выразился, но в ФФ и Хроме работает через вебсокеты, в других бразерах работает через long polling
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                              0
                                              Ох какая прелесть. А я думал как раз что-то такое сделать.
                                              Еще и есть инструкция по интеграции в кохану… Вы молодец, спасибо)
                                                +1
                                                Сколько кушает памяти одно содеинение?
                                                Поддерживаете Bayeux?
                                                Доставка сообщеий гарантированная?
                                                  0
                                                  Все, хакнули)
                                                    –1
                                                    исходники доставляют

                                                    бесконечный цикл

                                                    $now = microtime();
                                                    foreach ($this->timeouts…
                                                    if ($timeout->get_deadline() <= $now)…

                                                    ну то есть каждый момент времени проверяется, не вылетел ли очередной таймаут
                                                    даже боюсь представить, сколько ресурсов CPU оно потребляет на сервере ;)
                                                      0
                                                      Проект переехал с Google Code на github

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

                                                      Самое читаемое