Protocole ws
Actuellement, la version du protocole ws de Workerman est 13.
Workerman peut agir en tant que client et établir une connexion websocket via le protocole ws, ce qui permet une communication bidirectionnelle avec un serveur websocket distant.
Attention
Le protocole ws ne peut être utilisé que parAsyncTcpConnectionen tant que client, et ne peut pas écouter en tant que serveur websocket. Autrement dit, l'écriture suivante est incorrecte.
$worker = new Worker('ws://0.0.0.0:8080');
Si vous souhaitez utiliser Workerman comme serveur websocket, veuillez utiliser le protocole websocket.
Exemple de protocole ws en tant que client websocket :
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Protocols\Ws;
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
// Lors du démarrage du processus
$worker->onWorkerStart = function()
{
// Se connecter au serveur websocket distant avec le protocole websocket
$ws_connection = new AsyncTcpConnection("ws://127.0.0.1:1234");
// Envoyer un opcode de websocket avec 0x9 au serveur toutes les 55 secondes (optionnel)
$ws_connection->websocketPingInterval = 55;
// Définir les en-têtes HTTP (optionnel)
$ws_connection->headers = [
'Cookie' => 'PHPSID=82u98fjhakfusuanfnahfi; token=2hf9a929jhfihaf9i',
'OtherKey' => 'values'
];
// Définir le type de données (optionnel)
$ws_connection->websocketType = Ws::BINARY_TYPE_BLOB; // BINARY_TYPE_BLOB pour texte BINARY_TYPE_ARRAYBUFFER pour binaire
// Lorsque le TCP termine le handshake à trois voies (optionnel)
$ws_connection->onConnect = function($connection){
echo "tcp connecté\n";
};
// Lorsque le websocket termine le handshake (optionnel)
$ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $response) {
echo $response;
$con->send('hello');
};
// Lorsque le serveur websocket distant envoie un message
$ws_connection->onMessage = function($connection, $data){
echo "recv: $data\n";
};
// Lorsqu'une erreur survient sur la connexion, généralement une erreur de connexion au serveur websocket distant (optionnel)
$ws_connection->onError = function($connection, $code, $msg){
echo "erreur: $msg\n";
};
// Lorsque la connexion au serveur websocket distant est fermée (optionnel, il est recommandé d'ajouter une reconnexion)
$ws_connection->onClose = function($connection){
echo "connexion fermée et tentative de reconnexion\n";
// Si la connexion est fermée, se reconnecter après 1 seconde
$connection->reConnect(1);
};
// Après avoir configuré tous ces rappels, exécutez l'opération de connexion
$ws_connection->connect();
};
Worker::runAll();
Pour plus d'informations, veuillez vous référer à comme client ws/wss