RpcProtocol.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. /**
  3. * RPC 协议解析 相关
  4. * 协议格式为 [json字符串\n]
  5. * @author walkor <worker-man@qq.com>
  6. * */
  7. class RpcProtocol
  8. {
  9. /**
  10. * 从socket缓冲区中预读长度
  11. * @var integer
  12. */
  13. const PRREAD_LENGTH = 87380;
  14. /**
  15. * 判断数据包是否接收完整
  16. * @param string $bin_data
  17. * @param mixed $data
  18. * @return integer 0代表接收完毕,大于0代表还要接收数据
  19. */
  20. public static function dealInput($bin_data)
  21. {
  22. $bin_data_length = strlen($bin_data);
  23. // 判断最后一个字符是否为\n,\n代表一个数据包的结束
  24. if($bin_data[$bin_data_length-1] !="\n")
  25. {
  26. // 再读
  27. return self::PRREAD_LENGTH;
  28. }
  29. return 0;
  30. }
  31. /**
  32. * 将数据打包成Rpc协议数据
  33. * @param mixed $data
  34. * @return string
  35. */
  36. public static function encode($data)
  37. {
  38. return json_encode($data)."\n";
  39. }
  40. /**
  41. * 解析Rpc协议数据
  42. * @param string $bin_data
  43. * @return mixed
  44. */
  45. public static function decode($bin_data)
  46. {
  47. return json_decode(trim($bin_data), true);
  48. }
  49. }