Сегодня я покажу вам, как создать чат с помощью WebSockets и PHP Backend. Клиентская сторона может быть чем угодно (веб-сайт, приложение для Android, iOS и т. д.). В этой статье я покажу вам, как создать базовый веб-клиент.
Сервер
Начнем сборку серверной части. Сервер отвечает за размещение всех соединений и отправку сообщений соединениям.
Мне не нравится работающий на сервере JavaScript, поэтому я решил написать сервер на PHP. Мы не должны строить все сами. Есть PHP-библиотека под названием Ratchet, которая может сделать за нас тяжелую работу.
Создайте файл composer.json и запустите «composer install», это установит все необходимые зависимости, необходимые для запуска сервера сокетов.
{ "autoload": { "psr-4": { "MyApp\\": "src" } }, "require": { "cboden/ratchet": "^0.4", "ext-json": "*" } }
Далее нам нужно добавить несколько строк кода для инициализации сервера. Создайте папку с именем «src» или что-то другое, что вы определили в composer.json, и другую папку с именем «bin».
Во-первых, мы начинаем с кода в «bin». Этот файл вызывается для запуска сервера. Или, скажем, это сервер.
Создайте файл «server.php» в «bin» и вставьте в него следующий код.
<?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( new WsServer( new Chat() ) ), 8080 ); $server->run();
Всякий раз, когда вы запускаете этот сценарий, вы запускаете сервер, работающий на порту 8080 на вашем компьютере.
В коде вы можете увидеть «новый чат ()» и оператор использования «использовать MyApp\Chat;» это класс, который мы должны определить сами.
Поместите файл «Chat.php» в «src». Этот файл является наиболее интересной частью сценария сервера. Это абсолютно базовый скрипт без каких-либо особенностей. Он просто отправляет сообщения всем другим соединениям. Вам придется написать больше кода для разработки таких вещей, как чат-бот или прямые сообщения.
<?php namespace MyApp; use Ratchet\ConnectionInterface; use Ratchet\MessageComponentInterface; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $localIP = getHostByName(getHostName()); $this->clients = array(); } public function onOpen(ConnectionInterface $conn) { $this->clients[] = $conn; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { if (($key = array_search($conn, $this->clients)) !== false) { unset($this->clients[$key]); } } public function onError(ConnectionInterface $conn, \Exception $e) { $conn->close(); } }
Сторона клиента
Веб-клиент
Я покажу вам только JavaScript для подключения к серверу WebSocket. Вы можете создавать HTML-материал самостоятельно.
var conn = new WebSocket('ws://localhost:8080'); //Change this! conn.onopen = function (e) { $('#send-msg').prop("disabled", false); }; conn.onmessage = function (e) { var msg = JSON.parse(e.data); addMessage(msg); }; $('#send-msg').click(function () { var text = $('#msg').val(); if (text.length === 0) { return; } var msg = { 'user': user, 'text': text, 'time': moment().format('HH:mm') }; conn.send(JSON.stringify(msg)); addMessage(msg); $('#msg').val(''); });
Вот и все. Вам понадобится несколько часов, чтобы создать отличное приложение для чата, но этот код является хорошей отправной точкой.
Если что-то не работает или вам нужна помощь, не стесняйтесь написать комментарий.
public function onError(ConnectionInterface $conn, \Exception $e) { $conn->close(); } }