Ejemplo simple de desarrollo
Instalación
Instalar workerman
Ejecute en un directorio vacío
composer require workerman/workerman
Ejemplo uno, proporcionar servicios web al externo utilizando el protocolo HTTP
Cree el archivo start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// Crea un Worker que escucha en el puerto 2345, utilizando el protocolo http
$http_worker = new Worker("http://0.0.0.0:2345");
// Inicia 4 procesos para proporcionar servicios externos
$http_worker->count = 4;
// Responde con "hello world" al recibir datos del navegador
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// Envía "hello world" al navegador
$connection->send('hello world');
};
// Ejecuta el Worker
Worker::runAll();
Ejecución en la línea de comandos (para usuarios de Windows, use cmd)
php start.php start
Prueba
Supongamos que la IP del servidor es 127.0.0.1
Acceda a la URL http://127.0.0.1:2345 en un navegador
Nota:
-
Si surge algún problema de acceso, consulte la sección Razones de fallo en la conexión del cliente.
-
El servidor utiliza el protocolo HTTP y solo puede comunicarse a través del mismo protocolo, no se puede utilizar directamente para WebSocket u otros protocolos.
Ejemplo dos, proporcionar servicios externos utilizando el protocolo WebSocket
Cree el archivo ws_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Nota: Aquí, a diferencia del ejemplo anterior, se utiliza el protocolo websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// Inicia 4 procesos para proporcionar servicios externos
$ws_worker->count = 4;
// Al recibir datos del cliente, devuelve "hello $data" al cliente
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// Envía "hello $data" al cliente
$connection->send('hello ' . $data);
};
// Ejecuta el Worker
Worker::runAll();
Ejecución en la línea de comandos
php ws_test.php start
Prueba
Abra el navegador Chrome, presione F12 para abrir la consola de depuración. En la pestaña Console, ingrese (o agregue el siguiente código a una página HTML y ejecútelo con JavaScript)
// Suponga 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("Enviar una cadena al servidor: tom");
};
ws.onmessage = function(e) {
alert("Mensaje recibido del servidor: " + e.data);
};
Nota:
-
Si surge algún problema de acceso, consulte la sección Falla de conexión del cliente en el manual.
-
El servidor utiliza el protocolo WebSocket y solo puede comunicarse a través del mismo protocolo, no se puede utilizar directamente para HTTP u otros protocolos.
Ejemplo tres, envío directo de datos a través de TCP
Cree el archivo tcp_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Crea un Worker que escucha en el puerto 2347, sin utilizar ningún protocolo de capa de aplicación
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// Inicia 4 procesos para proporcionar servicios externos
$tcp_worker->count = 4;
// Cuando el cliente envía datos
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// Envía "hello $data" al cliente
$connection->send('hello ' . $data);
};
// Ejecuta el Worker
Worker::runAll();
Ejecución en la línea de comandos
php tcp_test.php start
Prueba: Ejecución en la línea de comandos
(El efecto en la línea de comandos de Linux a continuación es ligeramente diferente al 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:
-
Si surge algún problema de acceso, consulte la sección Falla de conexión del cliente en el manual.
-
El servidor utiliza el protocolo TCP sin formato, no puede utilizarse directamente para WebSocket, HTTP y otros protocolos.