Существует отличная реализация сокетов с поддержкой протокола WAMP на PHP - Ratchet. Подробная документация на этом сайте
А теперь рецепт из практики:
1. Собираем простое приложение с помощью composer, нам понадобится пакет cboden/ratchet
2. Пишем базовый класс
<?php
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Msg implements MessageComponentInterface {
public function onOpen(ConnectionInterface $conn) {
}
public function onMessage(ConnectionInterface $from, $msg) {
}
public function onClose(ConnectionInterface $conn) {
}
public function onError(ConnectionInterface $conn, \Exception $e) {
}
}
Четыре определённых в коде функции обязательны, они предназначены для обработки соответствующих событий
3. PHP-CLI скрипт, который запустит сервер сокетов и будет принимать сообщения:
msg-server.php
<?php
use Ratchet\Server\IoServer;
use MyApp\Msg;
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new Msg(),
8080
);
$server->run();
Если запустить данный файл командой
php bin/msg-server.php
Сервер будет работать и к нему можно даже подключиться с помощью telnet
telnet localhost 8080
4. Клиентская часть - пакет ratchet/pawl
5. Пример реализации:
<?php
require __DIR__ . '/vendor/autoload.php';
\Ratchet\Client\connect('ws://192.168.1.100:8080')->then(function($conn) {
$conn->on('message', function($msg) use ($conn) {
echo "Received: {$msg}\n";
$conn->close();
});
$conn->send('Hello World!');
}, function ($e) {
echo "Could not connect: {$e->getMessage()}\n";
});
Для передачи структурированных данных можно использовать традиционный JSON