• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • Веб сокеты или hello world по новому

Веб сокеты или hello world по новому

04.05.2017 13:58
lnroma 3 533 Источник
PHP*
Я не программист, Я любить заюзать готовые решение и получить результат в кратчайшие сроки. Сегодня, Я вам расскажу как я быстро поднял чатик на веб сокетах. И конкурс о сиськах в Московских пробках.
И так «hello world» с использованием ratchet socketo.me кому интересно прошу под кат

1. И так начнём с того что установим composer и создадим директорию с проэктом к примеру myProject.
2. Создаём composer.json с содержимым
{
    "autoload": {
        "psr-0": {
            "MyApp": "src"
        }
    },
    "require": {
        "cboden/ratchet": "0.3.*"
    }
}

И выполняем composer install
3. Создадим директорию src/MyApp и обработчик Chat
<?php
namespace MyApp;

require_once('Db.php');

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use MyApp\Db;

class Chat implements MessageComponentInterface
{
    protected $clients;

    public function __construct()
    {
        $this->clients = new \SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn)
    {
        // устанавливаем новое соеденение
        $this->clients->attach($conn);
    }

    // событие отправки сообщения в сокет
    public function onMessage(ConnectionInterface $from, $msg)
    {  
        // отправляем сообщение всем тем кто присоеденился
        foreach ($this->clients as $client) {
            $client->send($msg);
        }
    }

    // закрытия соеденения
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }
    
    // обработка ошибок
    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        $conn->close();
    }
}


4. Теперь создадим директорию bin сервер server.php

<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
    new HttpServer( // запускаем http сервер
        new WsServer( // websocket сервер
            new Chat() // обработчик событий
        )
    ),
    8080,
    '127.0.0.1'
);

$server->run();


5. Для соединения страницы с сокетом достаточно вызова следующей функции js
var conn = new WebSocket('ws://127.0.0.1:8080');

для того что бы отловить сообщения от сокета на необходимо по вешать слушателя на сообщение onmessage последнего
conn.onmessage = function(e) {
     console.log(e.data);
}

в data нам придёт ответ отправленный сервером в данном случае строка
conn.send('hello world')
так мы можем отправить сообщение на сервер.
6. Запуск этого добра:
— Запускаем сервер php bin/server.php
— Открываем страничку и готово

В качестве заключения приведу ссылки:
1. Чатик на сокетах sidimvprobke.com
2. git репазиторий github.com/lnroma/sidimvprobke
3. конкурс — конкурс с сиськами (тест на сообразительность, ведь завтра пятница)

не сложно правда ли?
Поделиться с друзьями
-->

Комментарии (3)


  1. ishef
    04.05.2017 17:14
    #10203604
    +2

    Не могу определить что хуже — грамматика или смысл.


  1. vlreshet
    04.05.2017 17:15
    #10203606

    Ээээ… ммм… и?


  1. rapita
    04.05.2017 17:30
    #10203622
    +1

    Это быстрый перевод Creating Your First Application из документации?

МЕТКИ

  • Хабы
  • Теги

php

WebSockets

server

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • Модные направления в разработке

    • 16.05.2017 15:50

    Веб сокеты или hello world по новому

    • 04.05.2017 13:58

    Информационая безопасность в сфере телекома на примере Megafon'а -5

    • 17.10.2016 14:45

    GUI для php, или скрещиваем написанное расширение с скриншотером +2

    • 04.10.2016 23:48

    Пишем расширение с помощью библиотеки php-cpp для php7 +18

    • 01.10.2016 21:46

    Разработка addon firefox, или ещё один скриншотер с помощью webExtensions и addon sdk

    • 26.09.2016 13:31

    Разработка расширения для firefox, или мой первый опыт, на примере скриншотера +18

    • 23.09.2016 18:07

    Системные скрипты на php для linux, пишем скриншотер +2

    • 22.09.2016 14:10

    Разработка сервера на php и системных скриптов -2

    • 17.09.2016 15:51

    В России заблокировали сайты PornHub и YouPorn

    • 14.09.2016 15:43

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
07:01

Телеметрия для сети ресторанов: как в «Жар Пицце» контролируют холодильники и инженерные системы +9

07:00

Когда нашим дорогим инженерам сильно надоело 5 раз проверять документацию за подрядчиками +8

06:31

Несколько собак и другие наши заблуждения об адресах электронной почты +7

07:05

Позвонить бесплатно: история взлома аналоговой телефонии. Часть 1 +6

07:01

Релиз Linux 7.1: улучшенное управление питанием, новый драйвер NTFS и оптимизация для видеокарт +6

03:20

Погружение в многозадачность Python: процессы, потоки, GIL и асинхронность +6

07:00

Как мы научились видеть иерархию корутин в Android‑приложении: Coroutine Tracer в библиотеке Demeter +5

07:57

КД по ГОСТ за один клик +4

07:42

Как попасть в ответы ChatGPT: технический разбор механики цитирования и актуальный гайд по GEO на июнь 2026 +3

06:00

Платформы для совместной работы команд: как выбрать сервис для проектов и организации командных процессов +3

05:00

Делаю игру, где бактерии живут в чашке. Сначала это казалось хорошей идеей… +3

07:54

Я собрал свой мессенджер по вечерам после работы +2

06:35

NextDNS, AdGuard DNS, Cloudflare for Families, Pi-hole, мы — честное сравнение от конкурента +2

06:06

Как я навайбкодил игру и выпустил ее на Яндекс Игры +2

07:43

Новые серверы в облаке mClouds: обзор Dell R7725 с 64-х ядерными AMD EPYC 9555 +1

07:41

Как секционирование помогло оптимизировать базу 1С:ERP объёмом 16 ТБ и победить datetime2 +1

07:06

Когда всё решает «да» или «нет»: SAT-солверы и оптимизация в PySAT +1

07:01

Летний аналитический фестиваль: ИИ у аналитиков и другие темы +1

07:00

Сломанный кэш выглядит как рабочий: prompt caching для тех, кто строит LLM-агентов +1

07:00

Целая прорва связных списков, чтобы выучить Rust +1

11:00

Новые правила Хабра. Версия от 2026 +180

07:01

Звуки музыки советских ПЭВМ +59

14:05

Почему мы до сих пор неправильно пишем физические движки и 3D-графику +50

07:52

YaFF в опенсорсе: как и зачем мы сделали zero‑copy представление для Protobuf +46

12:01

Интервью автора легендарной Elite Йена Белла (Эксклюзив для Хабра) +40

07:12

Почему советы «как улучшить резюме» в IT в 2026 — это издевательство (и что делать вместо этого) +31

08:00

История виртуализации от chroot и jails до современных гипервизоров +27

14:17

Как «Союз» считал орбиту шестерёнками: внутри навигационного компьютера «Глобус» +26

13:01

Docker Fundamentals: теория и базовая эксплуатация +22

14:38

Условная агрегация в SQL: ускоряем отчеты, избавляясь от лишних JOIN-ов и подзапросов +20

22:46

Адаптация в команде есть? А если найду? +19

09:01

Как выбрать самый безопасный мессенджер +18

08:00

Код в эпоху AI: как перестать бороться за качество и начать контролировать деградацию +15

07:05

Zynq 7000. Переносим I²C Master Controller.  Linux + buildroot + kernel driver +15

12:39

Как в 1915 году взялись собирать базу данных на всю страну без единого компьютера +14

12:37

Лонсдейлитовая кромка. Перспективы искусственного расширения шкалы Мооса. Guest Post +14

13:17

Как незаметная indirect-зависимость в Go дописала ручку в ваш HTTP-сервер +13

09:07

Пора редактировать людей +12

21:28

Clean Architecture и AI: как я перестроил проект на 200К строк, чтобы агенты не ломали код +11

08:00

Технический и продуктовый мониторинг за кастомизациями Битрикс24: как настроить и на что смотреть +11

13:01

Как я написал «Обратную змейку» на чистом Canvas +65

12:06

Реальные профессии будущего, а не «промпт-инженер» и про то, как мировой средний класс исчезает +59

09:01

Вы не знаете HTML. Мои вопросы об HTML с ответами +56

07:50

Claude Code убрал из моей работы рутину и почему я этому не долго радовался +55

07:00

Рояль на даче: использую ПЛК на Linux как real-time-синтезатор фортепиано +38

12:00

Железный дайджест за май: тесты B300, GPU от Alibaba и PCIe 8.0 +36

07:05

1 Вольт, как эталон: как, когда, каким образом +35

13:06

Как работает передача данных в радиоэфире: прогоняем картинки с котиками через ресурсную сетку +34

08:00

Как я пытался создать шедевр в Qwen, Luma и Pika, и что из этого вышло +30

07:02

О конференции OpenTalks.AI 2026: мои впечатления и 5 полезных докладов +30

07:01

MCP vs CLI + Skill: что выгоднее для ИИ‑агента при работе с внутренними API +27

14:27

Banned Book Library +24

15:53

ID, token, UUID и slug: в чём разница и почему их нельзя мешать +23

11:14

QA на уровне платформы: как мы строили систему качества +21

08:10

Время нанимать overqualified +20

12:02

PostgreSQL не тормозит. Почему мы перестали масштабировать базу данных и начали масштабировать архитектуру +16

12:02

PostgreSQL не тормозит. Почему мы перестали масштабировать базу данных и начали масштабировать архитектуру +16

09:43

Человек, укравший бесконечность: подлинная история Георга Кантора +16

07:00

Как я проектировал космический ковчег, который не ломает физику +16

06:41

Как ораклист сертификацию по Postgres сдавал +16

ОБСУЖДАЕМОЕ

  • Новые правила Хабра. Версия от 2026 +180

    • 299   18000

    Реальные профессии будущего, а не «промпт-инженер» и про то, как мировой средний класс исчезает +59

    • 188   32000

    Claude Code убрал из моей работы рутину и почему я этому не долго радовался +55

    • 68   13000

    Почему советы «как улучшить резюме» в IT в 2026 — это издевательство (и что делать вместо этого) +31

    • 60   11000

    Generic Repository обещал три вещи — не сдержал ни одной и забрал доменную модель +5

    • 48   11000

    Цена одного канала видеонаблюдения на нейронных сетях +3

    • 47   5600

    Как я проектировал космический ковчег, который не ломает физику +16

    • 45   7200

    Парадокс Open-Source: Единственный способ победить корпорации — раздать свой код бесплатно +9

    • 40   7900

    OS Personium: инженерный подход к психологии +5

    • 38   6000

    ЦОДам в Москве отказывают в сети, они вынуждены строить электростанции +4

    • 31   7600

    Время нанимать overqualified +20

    • 29   9300

    Как я написал «Обратную змейку» на чистом Canvas +65

    • 27   16000

    Я год не писал код руками. Но я не вайбкодер — и это две разные профессии +9

    • 26   8900

    Звуки музыки советских ПЭВМ +59

    • 26   11000

    MAX Light — легкая версия клиента MAX для ПК Windows +9

    • 25   7000
  • Главная
  • Контакты
© 2026. Все публикации принадлежат авторам.