Ejemplo simple de desarrollo

Instalación

Instalar workerman
Ejecute en un directorio vacío
composer require workerman/workerman

Ejemplo 1, Proporcionar servicios web externamente utilizando el protocolo HTTP

Crear archivo start.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

// Crear un Worker que escuche en el puerto 2345 y use el protocolo http para la comunicación
$http_worker = new Worker("http://0.0.0.0:2345");

// Iniciar 4 procesos para proporcionar servicios externamente
$http_worker->count = 4;

// Cuando se reciben datos enviados desde el navegador, responde con hello world al navegador
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // Enviar hello world al navegador
    $connection->send('hello world');
};

// Ejecutar el worker
Worker::runAll();

Ejecutar desde la línea de comandos (usuarios de Windows usar cmd命令行, aplicable en adelante)

php start.php start

Prueba

Supongamos que la IP del servidor es 127.0.0.1

Acceda a la URL en el navegador http://127.0.0.1:2345

Nota:

  1. Si hay problemas para acceder, consulte la sección Razones para fallar la conexión del cliente para solucionar.

  2. El servidor utiliza el protocolo http, solo se puede comunicar usando el protocolo http, no se puede comunicar directamente con otros protocolos como websocket.

Ejemplo 2, Proporcionar servicios externamente utilizando el protocolo WebSocket

Crear archivo ws_test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// Nota: aquí es diferente del ejemplo anterior, se utiliza el protocolo websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// Iniciar 4 procesos para proporcionar servicios externamente
$ws_worker->count = 4;

// Al recibir datos del cliente, devolver hello $data al cliente
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Enviar hello $data al cliente
    $connection->send('hello ' . $data);
};

// Ejecutar el worker
Worker::runAll();

Ejecutar desde la línea de comandos

php ws_test.php start

Prueba

Abra el navegador Chrome, presione F12 para abrir la consola de depuración, escriba en la sección Console (o coloque el siguiente código en una página html para ejecutarlo con js)

// Supongamos que la IP del servidor es 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("Conexión exitosa");
    ws.send('tom');
    alert("Enviando una cadena al servidor: tom");
};
ws.onmessage = function(e) {
    alert("Mensaje recibido del servidor: " + e.data);
};

Nota:

  1. Si hay problemas para acceder, consulte la sección Preguntas frecuentes del manual - Conexión fallida para solucionar.

  2. El servidor utiliza el protocolo websocket, solo se puede comunicar usando el protocolo websocket, no se puede comunicar directamente con otros protocolos como http.

Ejemplo 3, Transmitir datos directamente utilizando TCP

Crear tcp_test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// Crear un Worker que escuche en el puerto 2347, sin usar ningún protocolo de nivel de aplicación
$tcp_worker = new Worker("tcp://0.0.0.0:2347");

// Iniciar 4 procesos para proporcionar servicios externamente
$tcp_worker->count = 4;

// Cuando el cliente envía datos
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Enviar hello $data al cliente
    $connection->send('hello ' . $data);
};

// Ejecutar el worker
Worker::runAll();

Ejecutar desde la línea de comandos

php tcp_test.php start

Prueba: ejecutar desde la línea de comandos
(Las siguientes son las salidas de la línea de comandos de Linux, que pueden diferir de las de Windows)

telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom

Nota:

  1. Si hay problemas para acceder, consulte la sección Preguntas frecuentes del manual - Conexión fallida para solucionar.

  2. El servidor utiliza el protocolo TCP sin procesar, no se puede comunicar directamente con otros protocolos como websocket o http.