ФорумПрограммированиеPHP для идиотов → Прослушка сокета

Прослушка сокета

  • KavaBunGer

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2012 г. 18:18

    Добры день.
    Долго бьюсь с одной проблемой. Пишу асинхронный чат с php на стороне сервера.
    Сокеты tcp, nonblocket.

    При подключении нового пользователя сокеты форкаю в отдельные процессы и провожу авторизацию.
    Дальше нужна асинхронная прослушка сокета, т.е. когда он может не только получить данные, в случае их наличия, но отправить при надобности.

    Я его (сокет) перевожу а неблокирующий режим и тут начинаются траблы…
    читать из него получается с костылями, но вот писать нет, плюс проц начинает есть.
    Работа с nonbloket сокетами во всех описаниях сводится к select, но у меня один сокет, и как её применить я не знаю.

    Прошу, помогите организовать прослушку сокета!
  • KavaBunGer

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 8 апреля 2012 г. 18:29, спустя 10 минут 44 секунды

    function Wait () {

    socket_set_nonblock($this->user_socket);

    while (true){

    $bufer = socket_read($this->user_socket, 1024, PHP_NORMAL_READ);
    if(!empty($bufer)){
    // есть что послать серверу - обработчку

    // секция не работает как хочется
    }
    if(!empty($this->server_messages)){
    // есть что послать юзеру

    // эта секция понятна
    }

    usleep(100);
    }
    }
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 апреля 2012 г. 18:51, спустя 22 минуты 27 секунд

    хуйней занимаешься во первых. во вторых не тот язык выбрал для сокетов долгоживущих
    Сапожник без сапог
  • KavaBunGer

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2012 г. 1:48, спустя 6 часов 56 минут 31 секунду

    phpdude

    Я и не строю планов по захвату галактики или написанию второго фейсбука. Пишу элементарную вещь - чат.

    хуйней занимаешься во первых

    Может быть.

    не тот язык выбрал для сокетов долгоживущих

    Ну да, сейчас пойду изучать питон или перл, зайду на профильный форум по этим языкам - отправят учить яву или эрланг. Пройденный этап…

    Но только ради чата учить язык программирования, это еще большая хуйня, чем писать чат на пхп.
    Причем стоит заметить, что в пхп есть все нужные инструменты для его реализации.
    Но не одно блядское гуру php в рутене нихуя не знает как с этим работать, зато умные мысли вроде "хуйней занимаешься" или "иди учи другой язык" высерает регулярно…
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 9 апреля 2012 г. 2:21, спустя 33 минуты 18 секунд

    http://php.net/manual/en/book.libevent.php
    google libevent, где-то видел тему, где его достаточно хорошо разжёвывали, даже на русском
    Work, buy, consume, die
  • KavaBunGer

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2012 г. 3:17, спустя 55 минут 40 секунд

    Nyaah, огромное человеческое спасибо!
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 9 апреля 2012 г. 3:57, спустя 22 минуты 19 секунд

    Всё фигня, вот тема http://socket.io/
    Также можете посмотреть мой пример кода на perl+EV, с сокетами https://github.com/studentIvan/RDMT/blob/master/Server/rdmt.pl
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 9 апреля 2012 г. 3:58, спустя 41 секунду

    Щас еще дам список
    Спустя 15 сек.
    https://github.com/LearnBoost/socket.io (node.js)
    https://github.com/yrashk/socket.io-erlang (erlang)
    https://github.com/mochi/mochiweb (erlang)
    https://github.com/ibdknox/socket.io-netty (java)
    https://github.com/eclipse/jetty.project (java)
    https://github.com/benkay/java-socket.io.client (java)
    https://github.com/Ovea/Socket.IO-Java (java)
    https://github.com/Gottox/socket.io-java-client (java)
    https://github.com/cometd/cometd (java)
    https://github.com/Atmosphere/atmosphere (java)
    https://github.com/ignacio/LuaNode-Socket.IO (lua)
    https://github.com/vti/pocketio (perl)
    https://github.com/DmitryKoterov/dklab_realplexor (perl)
    https://github.com/madari/go-socket.io (go)
    https://github.com/MrJoes/tornadio2 (python)
    https://github.com/MrJoes/tornadio (python)
    https://github.com/knsd/gevent-socketio (python)
    https://github.com/powdahound/twisted (python)
    https://github.com/gameclosure/orbited2 (python)
    https://github.com/facebook/tornado (python)
    https://github.com/stephenmcd/django-socketio (python)
    https://github.com/dkastner/Socket.io-ruby (ruby)
    https://github.com/markjeee/Socket.IO-rack (ruby)
    https://github.com/maccman/juggernaut (ruby)
    https://github.com/simb/FlashSocket.IO (flash)
    https://github.com/APE-Project/APE_Server ©
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 9 апреля 2012 г. 4:55, спустя 56 минут 49 секунд

    https://github.com/APE-Project/APE_Server ©

    Никата Грошин (когда-то работал в Геометрии) пишет
    на самом деле обезъяныч реально ацкая негибкая поделка
    Лучше использовать node.js+socket.io
    — из коробки все популярные транспорты — от вебсокетов до пулинга
    — море готовых расширений для node — хоть монгоДб хоть редис(со встроенным pub/sub)
    Обезъяныч же предлагает только Мускуль и только лонг пулинг



    https://github.com/LearnBoost/socket.io (node.js)

    в то же время Иван Шумков (до сих пор работает в Геометрии) пишет
    Ыocket.io жуткая вещь. Авторы похоже больше пиаром чем разработкой занимаются. Мы отказались от него и реализовываем свои транспорты
    Симптомы Socket.IO: отваливаются клиенты, баги в транспортах, утечки памяти, медленно обрабатывает данные, к нагрузкам не приучена.


    мы в свою очередь используем как раз его разработку - Beseda. Пока на продакшене в тестовом режиме крутится, широкой публике не видна.
    Спустя 126 сек.
    http://2011.devconf.ru/offers/25
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 9 апреля 2012 г. 5:33, спустя 38 минут 12 секунд

    А вы сами сталкивались с этими симптомами?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 9 апреля 2012 г. 5:47, спустя 14 минут 9 секунд

    нет, мы решили сразу юзать беседу
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 9 апреля 2012 г. 6:50, спустя 1 час 3 минуты 4 секунды

    А вдруг он сказал это для того, чтобы пользовались его беседой а не сокет.ио?
  • KavaBunGer

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 9 апреля 2012 г. 11:43, спустя 4 часа 53 минуты 30 секунд

    Копнул в сторону node.js и переписал уже написанный на php код чата под него. Получилось примерно в 10 раз короче и читабельнее. Сдается что еще и быстрее.
    Но это при условии что я знаком с яваскриптом…
    Так что ветку можно закрывать, спасибо за ссылки, именно благодаря им я взглянул на nodejs.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 апреля 2012 г. 12:02, спустя 18 минут 49 секунд

    KavaBunGer, ну даешь
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!