如何在PHP环境中使用ProtoBuf数据格式_php技巧

来源:脚本之家  责任编辑:小易  

Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有确保这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域。就是因为Spring对一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非线程安全状态采用ThreadLocal进行处理,让它们也成为线程安全的状态,因为有状态的Bean就可以在多线程中共享了。一般的Web应用划分为展现层、服务层和持久层三个层次,在不同的层中编写对应的逻辑,下层通过接口向上层开放功能调用。在一般情况下,从接收请求到返回响应所经过的所有程序调用都同属于一个线程。ThreadLocal是解决线程安全问题一个很好的思路,ThreadLocal是一个为线程提供线程局部变量的工具类。它的思想也十分简单,就是为线程提供一个线程私有的变量副本,这样多个线程都可以随意更改自己线程局部的变量,不会影响到其他线程。不过需要注意的是,ThreadLocal提供的只是一个浅拷贝,如果变量是一个引用类型,那么就要考虑它内部的状态是否会被改变,想要解决这个问题可以通过重写ThreadLocal的initialValue()函数来自己实现深拷贝,建议在使用ThreadLocal时一开始就重写该函数。ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题www.zgxue.com防采集请勿采集本网。

前言

  RPC是google公司主导的一款RPC框架,并使用protobuf作为数据传输格式,伴随gRPC框架的成熟及使用人群的增加,对于底层使用的数据格式protobuf也被越来越受到重视,而对于PHP生态而言,相关ProtoBuf介绍文档及使用资料比较少,故此写简文希望能帮助到一些有需要的同学。

3、mmap是mac+mysql+apache+php的集成环境,主要用于在mac本地快速创建php环境,对于phper是相当不错的软件。4、下面将给出使用mmap()的一个范例:范例1给出两个进程通过映射普通文件实现共享内存通信;

  ProtoBuf (Google Protocol Buffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展特性,类型于常用的XML及JSON,但具有更小的传输体积、更高的编码、解码能力,特别适合于数据存储、网络数据传输等对存储体积、实时性要求高的领域。

方法是:在Windows启动后,点击“开始”→“运行”菜单项百,在“打开”栏中键入regedit,然后按“确定”键;展开注册表到 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Internet Explorer\\Main下,在

  目前官方ProtoBuf 最新版本ProtoBuf3,已经支持多种语言:C++\C#\Go\Java\Python\Ruby\Object C \Javascript\PHP,并且提供工具很方便地根据不同语言产生ProtoBuf需要的类库。

由于好久没有搭环境,在Linux上搭apache、PHP的环境时,遇到libphp5.so 无法生成这个问题,我也困扰了我半天,很是郁闷。从网上找了各种资料,都是瞎转载,太无聊的一堆人了,自己成功没有成功的

  下面将通过Person数据格式作为示例进行描述如果在PHP环境中如何使用ProtoBuf3。

国产屏蔽电缆抗干扰的能力应该要若一些,如果是电磁环境很差的地方,例如有交交变频系统等,建议使用profibus-dp电缆。比较重要的系统中,对通讯安全非常严格的话,建议还是使用西门子的profibus-dp电缆。

一、定义一个消息类型

你的系统有可能是win7 64bit的 这个环境下不支持这个驱动 当然 你假如不用里面的tasking工具 没驱动也无关紧要

创建一个关于Person的定义文件(以.proto为后缀),如示例为person.proto,文件内容如下:

syntax="proto3";package test;message Person{ string name=1;//姓名 int32 age=2;//年龄 bool sex=3;//性别}

1、syntax="proto3":表明使用的是proto3格式,如果不指定则为proto2

2、package test:定义包名为test,生成类时,会产生一个目录为test

3、message Person:消息主体内容,里面为各个字段的定义

二、生成对应的PHP类

定义好Person的格式后,该格式如果不生成我们所需要的类库,其实是无任何意义的,还google提供一个工具protoc生成我们要的类库。

1、安装protoc

安装地址:protobuf-php-3.5.1.tar.gz,目前最新为3.5.1

官方发布地址:https://github.com/google/protobuf/releases/tag/v3.5.1

解压并安装:

tar -zxvf protobuf-php-3.5.1.tar.gzcd protobuf-3.5.1./configure --prefix=/opt/soft/protobufmakemake install

2、生成类库

/opt/soft/protobuf/bin/protoc --php_out=./ person.proto

生成后将在当前目录产生如下文件:

GPBMetadata/Person.php

Test/Person.php

三、在PHP中使用ProtoBuf

在PHP中使用ProtoBuf依赖一个protobuf的扩展,目前提供两种方式进行使用,1:php的c扩展,2:php的lib扩展包,这两者均可在刚才下载包里可以找到。

另外,也可以使用composer进行安装该依赖扩展:composer require google/protobuf

这里我主要是使用composer安装,应该它可以帮我产生autoload

安装好依赖后,我们就可以开始在php环境下使用protobuf了

1、序列化

<?phpinclude 'vendor/autoload.php';include 'GPBMetadata/Person.php';include 'Test/Person.php';$person = new Test\Person();$person->setName("lailaiji");$person->setAge("28");$person->setSex(true);$data = $person->serializeToString();file_put_contents('data.bin',$data);

2、反序列化

<?phpinclude 'vendor/autoload.php';include 'GPBMetadata/Person.php';include 'Test/Person.php';$bindata = file_get_contents('./data.bin');$person = new Test\Person();$person->mergeFromString($bindata);echo $person->getName();

可以正常地输出lailaiji

PHP常用的使用方法:

序列化:

1、serializeToString:序列化成二进制字符串

2、serializeToJsonString:序列化成JSON字符串

反序列化:

1、mergeFromString:二进制字符串反序列化

2、mergeFromJsonString:Json字符串反序列化

.proto的message解析

1、定义:

类型 变量名=位置;

如:int32 age=1;

这里需要区分,变量名后面的数字意义为该变量内容在二进制序列中的位置而不是变量的值,该数字必须是唯一不可重复使用。

2、目前支持的类型:

double,float,int32,int64,uint32 ,uint64,sint32,sint64

fixed32,fixed64,sfixed32,sfixed64,bool,bytes

性能测试

https://github.com/eishay/jvm-serializers/wiki

1、序列号+反序列号时间:

image.png

2、存储大小:

image.pn

这是著名的冰岛F-Port杀毒软件,具有即时病毒扫描、定期病毒扫描、自定义病毒扫描等功能。这是一个简单使用的抗滤过性病原体的工具,将透过发现及移动的病毒入侵中,保护你的资料。它目前可以发觉出64000不寻常及有害的计算机害虫。除了存取和要求扫描外,此工具也包含更新功能,自动的得到最新的病毒码程序。任何新的病毒都可以直接的加入到查觉数据库及解毒数据库。更新及病毒扫描可以自动的排程执行。F-PROT是一种防毒软件,只要有DOS环境就能执行,你可以在Autoexec.bat中加入F-PROT执行命令,一开机就加载F-PROT常驻保护计算机,也可以安排时间或者随时执行F-PROT来扫毒内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 使用phpstorm+xdebug搭建单步调试环境
  • mac osx下使用mamp安装配置php开发环境
  • 使用wamp搭建php本地开发环境
  • php使用pear实现mail发送功能 windows环境下配置pear
  • mac系统下使用brew搭建php(lnmp/lamp)开发环境
  • mac环境中使用brew安装php5.5.15
  • nginx php-fpm环境中chroot功能的配置使用方法
  • centos 5.5使用yum来安装lamp(php运行环境)
  • linux系统中设置多版本php共存配合nginx服务器使用
  • php图片加中文水印实现代码分享
  • php中判断字符串是否全是中文或含有中文的实现代码
  • php+html5+ajax实现上传图片的方法
  • php获取文件后缀的9种方法
  • 发一个php简单的伪原创程序,配合商城采集用的
  • yii2中datetime类的使用
  • php实现保存submit内容之后禁止刷新
  • mysql 的 like 问题,超强毕杀记!!!
  • yii 2.0如何使用页面缓存方法示例
  • F-Prot Antivirus 好不好
  • Spring 单例 多例 线程安全等问题,想请教大家
  • socket传输文件是怎么变成数据流并传输的
  • 如何搭建python+selenium自动化测试框架
  • 怎么读 mmap
  • 如何清除2345
  • php5.6编译生成libphp5.so的问题求助
  • 西门子PLC之间的通讯是怎么完成的。
  • win7安装DXP后提示paralel prot driver is not installed 怎么回事?
  • 高手来帮忙啊!
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php技巧使用phpstorm+xdebug搭建单步调试环境mac osx下使用mamp安装配置php开发环境使用wamp搭建php本地开发环境php使用pear实现mail发送功能 windows环境下配置pearmac系统下使用brew搭建php(lnmp/lamp)开发环境mac环境中使用brew安装php5.5.15nginx php-fpm环境中chroot功能的配置使用方法centos 5.5使用yum来安装lamp(php运行环境)linux系统中设置多版本php共存配合nginx服务器使用php图片加中文水印实现代码分享php中判断字符串是否全是中文或含有中文的实现代码php+html5+ajax实现上传图片的方法php获取文件后缀的9种方法发一个php简单的伪原创程序,配合商城采集用的yii2中datetime类的使用php实现保存submit内容之后禁止刷新mysql 的 like 问题,超强毕杀记!!!yii 2.0如何使用页面缓存方法示例php中json_decode()和json_encodphp 数组和字符串互相转换实现方php中使用curl实现get和post请求php中iconv函数使用方法php日期转时间戳,指定日期转换成php 页面跳转到另一个页面的多种php中文处理 中文字符串截取(mb_php下intval()和(int)转换使用与利用phpexcel实现excel数据的导入phpmyadmin 配置文件详解(配置)php目录管理函数小结php实现的权重算法示例【可用于游戏根据权php eval函数一句话木马代码php语言中global和$globals[]的分析 之二smarty foreach控制循环次数的实现详解深入解析php中的(伪)多线程与多进程php统计数组不同元素的个数的实例方法验证token、回复图文\文本、推送消息的实php如何获取文件的扩展名php变量范围介绍
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved