wokerman中自定义协议的使用和测试

今天给大家分享一个wokerman的自定义协议使用,以及最后的测试结果。

根据wokerman的自定义协议文档,简单使用text文本协议,telnet测试,协议内容是json串+\n为传输协议

在wokerman->wokerman->Protocols下新建文件例如Xieyi.php

<?php

namespace Wokerman\Protocols;

class Xieyi {

  //分包(检验包的完整性)

  public static function input($data) {

    $pos = strpos($data,'\n');

    if ($pos===false) {

      return 0;

    } else {

      return $pos+1;

    }

  }

  //打包(客户端传递过来的json数据进行打包加结束符\n)

  public static function encode($data) {

    return json_encode($data).'\n';

  }

  //解包(服务端传递过来的array数据进行解包)

  public static function decode($data) {

    return json_decode(trim($data,'\n'),true); //这块代码官网有误,导致使用时前端数据一直不出现,加上这个就可以了。

  }

}

?>

 

然后再项目中创建文件start.php使用代码如下:

<?php

use Workerman\Worker;
require_once __DIR__ . '/vendor/workerman/workerman/Autoloader.php';

$zidingyi = new Woker('Xieyi://0.0.0.0:1234');

$zidingyi->onMessage = function($connection,$data) { //$data数据就是当客户端发给服务端时协议会自动解包数据

  $connection->send(array('code'=>'0','msg'=>'ok')); //当服务端把数据发给客户端时协议会自动打包数据

  var_dump($data); //通过自定义协议解包得出的数据

}

Worker::runAll();

?>

测试阶段:需要使用

cmd->到start.php文件下->php start.php 开启workerman服务器

 

 然后再打开一个

cmd->telnet 127.0.0.1 1234

直接输入\n就是发个空数据,前端接收为空,解包失败就null了

例如:{"type":"message"}\n 

 

 

今天就分享到这里了,有什么疑问可以留言。

posted @ 2021-06-10 17:46  闫月Emily  阅读(214)  评论(0编辑  收藏  举报