ws协议

目前Workerman的ws协议版本为13

workerman可以作为客户端,通过ws协议发起websocket连接,连到远程websocket服务器,实现双向通讯。

注意:ws协议只能通过AsyncTcpConnection作为客户端使用,不能作为websocket服务端监听协议。也就是说以下写法是错误的。

  1. $worker = new Worker('ws://0.0.0.0:8080');

如果想用workerman作为websocket服务端,请使用websocket协议

ws作为websocket客户端协议示例:

  1. use Workerman\Worker;
  2. use Workerman\Connection\AsyncTcpConnection;
  3. require_once __DIR__ . '/Workerman/Autoloader.php';
  4. $worker = new Worker();
  5. // 进程启动时
  6. $worker->onWorkerStart = function()
  7. {
  8. // 以websocket协议连接远程websocket服务器
  9. $ws_connection = new AsyncTcpConnection("ws://echo.websocket.org:80");
  10. // 每隔55秒向服务端发送一个opcode为0x9的websocket心跳
  11. $ws_connection->websocketPingInterval = 55;
  12. // 连上后发送hello字符串
  13. $ws_connection->onConnect = function($connection){
  14. $connection->send('hello');
  15. };
  16. // 远程websocket服务器发来消息时
  17. $ws_connection->onMessage = function($connection, $data){
  18. echo "recv: $data\n";
  19. };
  20. // 连接上发生错误时,一般是连接远程websocket服务器失败错误
  21. $ws_connection->onError = function($connection, $code, $msg){
  22. echo "error: $msg\n";
  23. };
  24. // 当连接远程websocket服务器的连接断开时
  25. $ws_connection->onClose = function($connection){
  26. echo "connection closed and try to reconnect\n";
  27. // 如果连接断开,1秒后重连
  28. $connection->reConnect(1);
  29. };
  30. // 设置好以上各种回调后,执行连接操作
  31. $ws_connection->connect();
  32. };
  33. Worker::runAll();