php的pack函数应用
乐果 发表于 2015 年 01 月 22 日
如题,最近在用PHP写socket的客户端,用到了pack函数。因此记录下:
/**
* 测试链路是否能正常通信
* @author liuxiang <unphp@qq.com>
* @date 2015-01-22
* @return boolean
*/
public function ping()
{
$pool = $this->_pool;
$sendData = pack('A60', 'ping');
$sendCount = $this->fiexLenInfo($sendData);
$command = pack('a10', $sendCount) . $sendData;
socket_write($pool, $command, strlen($command));
$len_buff = @socket_read($pool, 10, PHP_NORMAL_READ);
$len = (int) trim($len_buff);
if ($len >= 5 && '200' === trim(@socket_read($pool, 5, PHP_NORMAL_READ)))
{
return true;
}
return false;
}
/**
* 请求socket服务接口
* @author liuxiang <unphp@qq.com>
* @date 2014-12-26
* @param type $address 调用的接口名(内部路由地址)
* @param type $data 发送的数据
* @return type
*/
public function send($address, $data = '')
{
$pool = $this->connect();
$sendData = pack('A60', $address) . $data;
$sendCount = $this->fiexLenInfo($sendData);
$command = pack('a10', $sendCount) . $sendData;
socket_write($pool, $command, strlen($command));
$len_buff = @socket_read($pool, 10, PHP_NORMAL_READ);
$len = (int) trim($len_buff);
if ($len >= 5)
{
$code = @socket_read($pool, 5, PHP_NORMAL_READ);
$rp = 5 === $len ? '' : @socket_read($pool, $len - 5, PHP_NORMAL_READ);
$rs = new coreServerResult($code, $rp);
return $rs;
}
else
{
App::error('服务返回数据异常!', 50003);
}
return null;
}
标签:PHP