Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
1

Как сделать чат на php

28.07.2018, 00:02. Показов 3345. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
По мотивам возникающих в последнее время тем по поводу чатов:
Получение $_SESSION в сокетах
ReactPhp чат, не работает
Как реализовать моментальное уведомление о новом сообщение
Чат на сокетах

Захотелось запилить некоторый пример, демонстрирующий как используя php на бэкеде мгновенно оповещать клиента о новых сообщениях, а заодно изучить новые технологии.

Есть следующие способы реализации данной идеи:
  • Polling
    Это самый очевидный вариант. Клиент периодически спрашивает у сервера есть ли какие новые данные. Легко реализуется "стандартным" php, но мгновенное получение не позволяет получить, поэтому меня в данной задаче не интересует
  • Long polling
    Клиент так же делает ajax запросы, но в отличае от предыдущего способа не завершает соединение, а продолжает его держать пока не наступит событие, т.е сервер не пришлет ответ. После чего клиент отправит новый запрос и т.д. "Стандартным" php сделать не получится, позволяет получать мгновенные сообщения, но имеются лучшие альтернативы и нет смысла использовать этот способ в новых проектах
  • Web sockets.
    Это уже полноценный двухсторонний канал между клиентом и сервером. В отличае от предыдущего способа не нужно делать новый запрос после получения нового сообщения. Еще отличается от остальных способов используемым протоколом: websocket вместо http
  • Server side events (SSE)
    Похож на long polling. Клиент делает http запрос, сервер отвечает, используя content-type: text/event-stream, но в отличае от long polling клиент не разрывает соединение после получения первого сообщения, а ждет новых сообщений. Только тут канал односторонний, клиент не может как в случае web socket посылать какие-либо данные серверу, есть только 1 возможность это сделать - при установке соединения. Реализована поддержка в браузерах посредствам объекта EventSource (которая мне не подошла :trollface:, о причинах будет позже), данный клиент очень живучий, при обрыве соединения будет сам пытаться его установить заново. И этот способ я буду использовать.

Технологии:

В качестве веб-сервера выбирал между ReactPHP и Swoole. ReactPHP недавно зарелизил стабильную версию, имеет неплохую документацию, в отличае то Swoole, большая часть материалов по которому на китайском. Но трудности закаляют, поэтому выбрал Swoole. К тому же Swoole реализован как расширение на языке C и потому потенциально быстрее
Фреймворк zend expressive, т.к. давно хотел его изучить. К тому же для него есть готовый модуль для Swoole, который правда пришлось немного подпилить под мои нужды. Возможно фреймворк для этой задачи оказался лишним, но изначально я планировал больше функциональности, большую часть которой решил пока не делать.
Клиент - SPA на Vue.js. В качестве альтернативы EventSource - EventSourcePolyfill. Оказалось что EventSource не умеет посылать кастомные заголовки, а для авторизации я использовал заголовок Authorization. Клиент пока еще очень сырой, полностью отсутствуют стили.

Сервер
Клиент
3
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2018, 00:02
Ответы с готовыми решениями:

Реально ли сделать такой чат на php?
Реально такой чат сделать на php? Чат будет активным если в одном помещении будет более одного...

Я хочу сделать программу - чат. Что б обмениваться сообщениями. Как такое сделать? Какой код?
Если можно то с объяснениями пожалуйста. На языке с ++

Как создать чат на php?
Как создать чат на php. Дайте кто-нибудь пособие или программы

Как создать Чат в PHP Devel Studio?
У меня появилась идея создание чата в PHP Devel Studio. Алгоритм программы такой: Добавлено...

5
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
28.07.2018, 08:52 2
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Web sockets.
Скажите пожалуйста, что лучше использовать тогда между обменом пользователя и сервера моментально сокеты либо же технология ajax????
В чем их разница если они оба выполняют практически одну и ту жу действии
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
28.07.2018, 09:15  [ТС] 3
Цитата Сообщение от maxoun Посмотреть сообщение
Скажите пожалуйста, что лучше использовать тогда между обменом пользователя и сервера моментально сокеты либо же технология ajax????
В чем их разница если они оба выполняют практически одну и ту жу действии
Но выполняют все же по-разному. Если просто слушать события с сервера тогда SSE, если нужно еще и сервер оповещать то Web-socket. Т.е для онлайн игры однозначно Web-socket, для чата хоть и есть запросы к серверу, но не такие частые, поэтому оба можно пробовать. Еще если поэксперементировать с http2 и научить использовать 1 tcp соединение. Или если есть долгий процесс выполняемый на сервере, промежуточные результаты которого нужно показывать на клиенте то SSE. Если единичное получение данных с сервера, то простой аякс
2
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
28.07.2018, 10:22 4
Jewbacabra, К сожалению я еще далек от этих протоколов, но образно я понял что к чему, спасибо вам.
0
7 / 6 / 1
Регистрация: 12.07.2018
Сообщений: 28
15.11.2018, 21:57 5
Цитата Сообщение от Jewbacabra Посмотреть сообщение
По мотивам возникающих в последнее время тем по поводу чатов
Как Вам написать?
У Вас ЛС закрыта.
0
0 / 0 / 0
Регистрация: 15.11.2018
Сообщений: 1
16.11.2018, 11:07 6
Это круто конечно, но легче было бы воспользоваться Telegram или скачать готовый репозиторий на GitHub.
0
16.11.2018, 11:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2018, 11:07
Помогаю со студенческими работами здесь

Как сделать чат на C#?
Здравствуйте! Вот, появилась идея сделать чат на языке C#! Подскажите - как мне её реализовать???

Как сделать чат?
Между двумя пользователями или большим количеством пользователей без перезагрузки страницы, на...

Как сделать чат?
Как сделать чат на js? хелпаните кто может)

Как сделать чат на Java?
Подскажите каким образом можно все это сделать ! Кто с этим работал ? Может мне кто какую ссылку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru