Swoole 网络通信协议,固定包头。
2018-08-26 17:31:53来源:博客园 阅读 ()
网络通信过程中,可能会出现分包和合包的情况。具体情况如https://wiki.swoole.com/wiki/page/484.html文档所讲的。这里测试了下固定包头的协议。示例代码如下
1.解包封装的方法
communicationPack.php
<?php //对数据信息封装 function packData($sendData,$packModel){ return pack($packModel, strlen($sendData)).$sendData; } //解包 function unpackData($rcvData,$packModel){ $length = $packModel=='N'?4:2; return substr($rcvData,$length); }
2.服务端 tcpServer.php
<?php require_once 'communicationPack.php'; $packModel = 'N'; //创建Server对象,监听 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); $serv->set(array( 'open_length_check' => true, 'package_max_length' => 2000000, 'package_length_type' => $packModel, //see php pack() 'package_length_offset' => 0, 'package_body_offset' => $packModel=='N'?4:2, )); //监听连接进入事件 $serv->on('connect', function ($serv, $fd) { echo "Client: Connect.\n"; }); //监听数据接收事件 $serv->on('receive', function ($serv, $fd, $from_id, $data) use($packModel){ echo "#{$serv->worker_id}>> received length=" . strlen($data) ."data=".$data. "}\n"; $data = unpackData($data,$packModel); $returnStr = "Server: ".$data; $serv->send($fd, packData($returnStr,$packModel)); }); //监听连接关闭事件 $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); //启动服务器 $serv->start();
启动服务端
3 客户端 tcpClient.php
<?php require_once 'communicationPack.php'; $packModel = 'N'; $client = new swoole_client(SWOOLE_SOCK_TCP); $client->set(array( 'open_length_check' => true, 'package_length_type' => $packModel, 'package_length_offset' => 0, //第N个字节是包长度的值 'package_body_offset' => $packModel=='N'?4:2, //第几个字节开始计算长度 'package_max_length' => 2000000, //协议最大长度 )); //连接到服务器 if (!$client->connect('127.0.0.1', 9501, 0.5)) { die("connect failed."); } //向服务器发送数据 //数据协议 $sendData = "test123"; $sendData = packData($sendData,$packModel); if (!$client->send($sendData)) { die("send failed."); } //从服务器接收数据 $data = $client->recv(); if (!$data) { die("recv failed."); } echo unpackData($data,$packModel); //关闭连接 $client->close();
然后启动客户端
服务端会打印
pack N是将数据转成了无符号32位的数字,这个刚好长度是4个字节,所以设定
package_body_offset=4
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- mac php Swoole入门 2019-07-23
- 老雷socket编程之认识常用协议 2019-07-23
- Swoole RPC 的实现 2019-05-22
- curl 模拟https协议请求 2019-05-22
- Swoole 整合成一个小框架 2019-05-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash