主要步骤:
定义user.proto消息类型
编译成浏览器可运行的proto文件
在浏览器使用user.js生成Protobuf对象
序列化为二进制 data
发送 data 到PHP
PHP使用Protobuf库解析二进制数据,反序列化为User对象
从User对象中取出字段值
1、下载google的protobuf的compiler,通过编译器可以将.proto文件转换为想要的语言文件。
下载地址:https://repo1.maven.org/maven2/com/google/protobuf/protoc/
我使用这个
2、新建一个user.proto:
syntax = "proto3";3、转换
message User {
string name = 1;
int32 age = 2;
}
protoc-4.0.0-rc-2-windows-x86_64 --js_out=import_style=commonjs,binary:. user.proto生成user_pb.js,如果是node.js的话就直接可以使用了,但是想在浏览器中使用还需要做一些处理
4、安装相关的nodejs库
npm install -g require(对库文件的引用库)5、新建一个exports.js
npm install -g browserify(这个是用来打包成前端使用的js文件)
npm install google-protobuf
var UserBody = require('./user_pb');6、打包成浏览器可运行的js,执行命令
module.exports = {
DataProto: UserBody
}
browserify exports.js > UserBody.js7、生成的UserBody就可以在浏览器使用了
<!DOCTYPE html>8、后端php
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/UserBody.js"></script>
<script type="module">
// 引入proto.js
var Msg = proto.User;
var msg = new Msg();
msg.setName('John');
var data = msg.serializeBinary();
var xhr = new XMLHttpRequest();
xhr.open('POST', 'your.php');
xhr.send(data);
</script>
</head>
<body>
</body>
</html>
<?php
require 'vendor/autoload.php';
use Protobuf\Message;
class User extends Message {}
// 处理Protobuf请求
$data = file_get_contents('php://input');
$user = User::parseBinary($data);
$name = $user->getName();
$age = $user->getAge();
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?