php原生socket调用zookeeper的方法
2018-09-05
后端
function Send($ip,$port,$path)
{
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
return false;
}
//set socket timeout
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec"=>10, "usec"=>0));
if(($result = socket_connect($socket, $ip, $port)) < 0) {
socket_close($socket);
return false;
}
$in = authenticate('');
if(!socket_write($socket, $in, strlen($in))) {
socket_close($socket);
return false;
}
$out = "";
$buff = @socket_read($socket, 256);
$out .= $buff;
$data = unpack("Nlen/Nversion/Ntimeout/JsessinoId/a*",$out);
var_dump($data);die;
$in = packData($path);
if(!socket_write($socket, $in, strlen($in))) {
socket_close($socket);
return false;
}
$out = "";
$buff = @socket_read($socket, 2048);
$out .= $buff;
socket_close($socket);
$data = unpackData($out);
var_dump(json_decode($data['data'],true));
}
function authenticate($pwd)
{
$reqlen = strlen($pwd);
$allLen = 28 + 16;
return pack("N2JNJa16",$allLen - 4,0,0,1000,0,$pwd);
}
function packData($path)
{
$reqlen = strlen($path);
$allLen = 16 + $reqlen + 1;
return pack("N4a*C",$allLen - 4,1,4,$reqlen,$path,0);
}
function unpackData($bin)
{
$len = unpack("Nlen",$bin);
if(!empty($len['len'])){
$data = unpack("Nlen/Nxid/Jxxid/Nerr/Ndatalen",$bin);
$data = unpack("Nlen/Nxid/Jxxid/Nerr/Ndatalen/a".$data['datalen']."data/a*",$bin);
return $data;
}
return [];
}
Send("120.26.102.171",2181,'/config/mysqldb/vpgame');