当前位置: 首页 > news >正文

四川公司网站建设模板工

四川公司网站建设,模板工,购买一个网站需要多少钱,模板网站建设咨询文章目录 1、Thrift RPC介绍1.1、Protocol 支持的数据传输协议1.2、Transport 支持的数据传输方式1.3、Server 支持的服务模型1.4、IDL语法数据类型1.5、开发步骤 2、接口定义文件2.1、创建接口定义文件2.2、生成对应平台语言代码2.2.1、下载生成工具2.2.2、生成各平台语言代码… 文章目录 1、Thrift RPC介绍1.1、Protocol 支持的数据传输协议1.2、Transport 支持的数据传输方式1.3、Server 支持的服务模型1.4、IDL语法数据类型1.5、开发步骤 2、接口定义文件2.1、创建接口定义文件2.2、生成对应平台语言代码2.2.1、下载生成工具2.2.2、生成各平台语言代码 3、使用Java实现服务器端4、客户端实现4.1、Java调用客户端实现4.2、Go调用客户端实现4.3、PHP调用客户端实现 1、Thrift RPC介绍 Thrift 是一个软件框架远程过程调用框架用来进行可扩展且跨语言的服务的开发封装了数据传输格式二进制、json和网络通信的服务框架提供多语言C, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml的网络服务器端和客户端程序组件 适用于搭建大型数据交换及存储的通用工具对于大型系统中的内部数据传输相对于 JSON 和 xml 无论在性能、传输大小上有明显的优势。 Thrift 开发的几个概念 Server 服务模型 Handler 数据处理接口 Processor 数据处理对象 Protocol 数据传输协议 Transport 数据传输方式 1.1、Protocol 支持的数据传输协议 TBinaryProtocol – 二进制格式.TCompactProtocol – 压缩格式TJSONProtocol – JSON 格式TSimpleJSONProtocol –提供 JSON 只写协议生成的文件很容易通过脚本语言解析。TDebugProtocol – 使用易懂的可读的文本格式以便于 debug 1.2、Transport 支持的数据传输方式 TFileTransport文件日志传输类允许 client 将文件传给 server允许 server 将收到的数据写到文件中。THttpTransport采用 Http 传输协议进行数据传输TSocket采用 TCP Socket 进行数据传输TZlibTransport压缩后对数据进行传输或者将收到的数据解压 下面几个类主要是对上面几个类地装饰采用了装饰模式以提高传输效率。 TBufferedTransport对某个 Transport 对象操作的数据进行 buffer即从 buffer 中读取数据进行传输或者将数据直接写入 buffer TFramedTransport以 frame 为单位进行传输非阻塞式服务中使用。同 TBufferedTransport 类似也会对相关数据进行 buffer同时它支持定长数据发送和接收。 TMemoryBuffer从一个缓冲区中读写数据 1.3、Server 支持的服务模型 TSimpleServer – 简单的单线程服务模型常用于测试 TThreadedServer - 多线程服务模型使用阻塞式 IO每个请求创建一个线程。 TThreadPoolServer – 线程池服务模型使用标准的阻塞式 IO预先创建一组线程处理请求。 TNonblockingServer – 多线程服务模型使用非阻塞式 IO需使用 TFramedTransport 数据传输方式 处理大量更新的话主要是在 TThreadedServer 和 TNonblockingServer 中进行选择。TNonblockingServer 能够使用少量线程处理大量并发连接但是延迟较高TThreadedServer 的延迟较低。实际中TThreadedServer 的吞吐量可能会比 TNonblockingServer 高但是 TThreadedServer 的 CPU 占用要比 TNonblockingServer 高很多。 1.4、IDL语法数据类型 基本类型 bool布尔值true或false byte8位有符号整数 i1616位有符号整数 i3232位有符号整数 i6464位有符号整数 double64位浮点数 string使用UTF-8编码编码的文本字符串容器类型 listt1一系列t1类型的元素组成的有序列表元素可以重复 sett1一些t1类型的元素组成的无序集合元素唯一不重复 mapt1,t2key/value对key唯一1.5、开发步骤 服务器端开发 1. 创建 Handler 2. 基于 Handler 创建 Processor 3. 创建 Transport通信方式 4. 创建 Protocol 方式设定传输格式 5. 基于 Processor, Transport 和 Protocol 创建 Server 6. 运行 Server客户端开发 1. 创建 Transport 2. 创建 Protocol 方式 3. 基于 Transport 和 Protocol 创建 Client 4. 运行 Client 的方法2、接口定义文件 2.1、创建接口定义文件 test.thrift /*** The first thing to know about are types. The available types in Thrift are:** bool Boolean, one byte* byte Signed byte* i16 Signed 16-bit integer* i32 Signed 32-bit integer* i64 Signed 64-bit integer* double 64-bit floating point value* string String* binary Blob (byte array)* mapt1,t2 Map from one type to another* listt1 Ordered list of one type* sett1 Set of unique elements of one type** Did you also notice that Thrift supports C style comments?*/// 命名空间,Java中的package namespace java com.penngo.thrift namespace php com.penngo namespace go com.penngo// 结构体 struct User {1: i64 id,2: string name,3: string password }// 服务,Java中创建Interface一样 service LoginService{// service中定义的函数相当于Java interface中定义的函数User login(1:string name, 2:string psw); }service RegisterService{User createUser(1:string name, 2:string psw); }2.2、生成对应平台语言代码 2.2.1、下载生成工具 下载地址https://thrift.apache.org/download 当前最新版本为thrift-0.19.0.exe thrift-0.19.0.exe重命名为thrift.exe与test.thrift在同一目录。 2.2.2、生成各平台语言代码 执行以下命令分别生成Java、Go、PHP平台的代码 thrift -gen java test.thrift thrift -gen go test.thrift thrift -gen php:classmap test.thrift # 支持PSR-4 loader # thrift -gen php test.thrift生成后的目录文件结构 3、使用Java实现服务器端 pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.penngo/groupIdartifactIdthrift-java/artifactIdversion1.0/versionpropertiesmaven.compiler.source11/maven.compiler.sourcemaven.compiler.target11/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdorg.apache.thrift/groupIdartifactIdlibthrift/artifactIdversion0.19.0/version/dependencydependencygroupIdjavax.annotation/groupIdartifactIdjavax.annotation-api/artifactIdversion1.3.2/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.17.2/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.17.2/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-simple/artifactIdversion1.7.36/version/dependency/dependenciesrepositoriesrepositoryidalimaven/idnameMaven Aliyun Mirror/nameurlhttps://maven.aliyun.com/repository/central/url/repository/repositoriespluginRepositoriespluginRepositoryidpublic/idnamealiyun nexus/nameurlhttps://maven.aliyun.com/nexus/content/groups/public//urlreleasesenabledtrue/enabled/releasessnapshotsenabledfalse/enabled/snapshots/pluginRepository/pluginRepositories /project实现LoginService服务LoginServiceImpl.java package com.penngo.service;import com.penngo.thrift.LoginService; import com.penngo.thrift.User;public class LoginServiceImpl implements LoginService.Iface{public LoginServiceImpl(){}public User login(String name, String psw){User user null;if(name.equals(penngo) psw.equals(123)){user new User();user.setId(1);user.setName(penngo);}return user;} }实现RegisterService服务RegisterServiceImpl.java package com.penngo.service; import com.penngo.thrift.RegisterService; import com.penngo.thrift.User;public class RegisterServiceImpl implements RegisterService.Iface{public RegisterServiceImpl(){}public User createUser(String name, String psw){User user new User();user.setId(2);user.setName(name);user.setPassword(psw);return user;} }实现LoginService和RegisterService注册完成服务启动。 package com.penngo;import com.penngo.service.LoginServiceImpl; import com.penngo.service.RegisterServiceImpl; import com.penngo.thrift.LoginService; import com.penngo.thrift.RegisterService; import org.apache.thrift.TMultiplexedProcessor; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException;public class HelloServer {private void start() {try {TServerSocket serverTransport new TServerSocket(7911);// 用户登录LoginService.Processor loginProcessor new LoginService.Processor(new LoginServiceImpl());// 用户注册RegisterService.Processor registerProcessor new RegisterService.Processor(new RegisterServiceImpl());TMultiplexedProcessor processor new TMultiplexedProcessor();processor.registerProcessor(LoginService, loginProcessor);processor.registerProcessor(RegisterService, registerProcessor);TServer server new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));System.out.println(Starting server on port 7911 ...);server.serve();} catch (TTransportException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]) {HelloServer srv new HelloServer();srv.start();} }项目文件结构 4、客户端实现 4.1、Java调用客户端实现 package com.penngo;import com.penngo.thrift.LoginService; import com.penngo.thrift.RegisterService; import com.penngo.thrift.User; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TMultiplexedProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport;public class HelloClient {public static void main(String[] args) {try {TTransport transport new TSocket(localhost, 7911);TProtocol protocol new TBinaryProtocol(transport);TMultiplexedProtocol mp1 new TMultiplexedProtocol(protocol,LoginService);LoginService.Client loginClient new LoginService.Client(mp1);TMultiplexedProtocol mp2 new TMultiplexedProtocol(protocol,RegisterService);RegisterService.Client registerClient new RegisterService.Client(mp2);transport.open();User user loginClient.login(penngo, 123);if (user ! null) {System.out.println(登录成功 user.getId() user.getName());} else {System.out.println(登录失败);}User user2 registerClient.createUser(test, 123456);if (user2 ! null) {System.out.println(创建用户成功 user2.getId() user2.getName());} else {System.out.println(创建用户失败);}transport.close();} catch (TException x) {x.printStackTrace();}} }4.2、Go调用客户端实现 安装Thrift依赖 go get github.com/apache/thriftgo客户端实现 package mainimport (contextcrypto/tlsfmtgithub.com/apache/thrift/lib/go/thriftnetosthrifttest/com/penngo )const (HOST 127.0.0.1PORT 7911 )var ctx context.Background()func main() {cfg : thrift.TConfiguration{TLSConfig: tls.Config{InsecureSkipVerify: true,}}// 网络接口var transport thrift.TTransportvar err errortransport thrift.NewTSocketConf(net.JoinHostPort(HOST, PORT), cfg)protocol : thrift.NewTBinaryProtocolConf(transport, cfg)// 客户端iprot : thrift.NewTMultiplexedProtocol(protocol, LoginService)oprot : thrift.NewTMultiplexedProtocol(protocol, LoginService)c : thrift.NewTStandardClient(iprot, oprot)loginClient : penngo.NewLoginServiceClient(c)// 客户端iprot2 : thrift.NewTMultiplexedProtocol(protocol, RegisterService)oprot2 : thrift.NewTMultiplexedProtocol(protocol, RegisterService)c2 : thrift.NewTStandardClient(iprot2, oprot2)registerClient : penngo.NewRegisterServiceClient(c2)if err : transport.Open(); err ! nil {fmt.Fprintln(os.Stderr, open transport error: , err)os.Exit(1)}defer transport.Close()res, err : loginClient.Login(ctx, penngo, 123)if err ! nil {fmt.Fprintln(os.Stderr, error: , err)os.Exit(1)}fmt.Fprintln(os.Stderr, Login: , res)res2, err2 : registerClient.CreateUser(ctx, test, 123456)if err2 ! nil {fmt.Fprintln(os.Stderr, error: , err2)os.Exit(1)}fmt.Fprintln(os.Stderr, CreateUser: , res2) } 项目文件结构 官方例子https://thrift.apache.org/tutorial/go.html 4.3、PHP调用客户端实现 创建composer.json {require: {apache/thrift: ^0.19.0},autoload: {files: [com/penngo/LoginService.php,com/penngo/RegisterService.php,com/penngo/Types.php]} }使用composer安装依赖 composer installphp客户端实现代码 ?php require_once vendor/autoload.php;use Thrift\Transport\TSocket; use Thrift\Protocol\TBinaryProtocol; use Thrift\Transport\TBufferedTransport; use Thrift\Protocol\TMultiplexedProtocol; use com\penngo\LoginServiceClient; use com\penngo\RegisterServiceClient;// 传输方式需与服务端一致 $socket new TSocket(localhost, 7911); // 传输协议需与服务端一致 $transport new TBufferedTransport($socket, 1024, 1024); $protocol new TBinaryProtocol($transport); $loginProtocol new TMultiplexedProtocol($protocol, LoginService); $registerProtocol new TMultiplexedProtocol($protocol, RegisterService); $loginClient new LoginServiceClient($loginProtocol); $registerClient new RegisterServiceClient($registerProtocol); $transport-open(); $user $loginClient-login(penngo, 123); print login.json_encode($user);$user $registerClient-createUser(test, 123456); print \ncreateUser.json_encode($user); $transport-close();项目文件结构 php官方例子https://thrift.apache.org/lib/php.html 附件源码
http://www.zqtcl.cn/news/725733/

相关文章:

  • 商标设计网站猪八戒网站建设与设计教程
  • 网站建设积分wordpress添加右侧菜单
  • 网站策划资料方案天津优化公司
  • 做网站推广哪家公司好成都最正规的装修公司
  • 菜鸟建网站如何制作推广网站
  • 无锡企业建站系统广州品牌网站建设
  • 什么网站能免费做公众号封面wordpress主题打不开
  • 扬州外贸网站建设制作广告的软件
  • 一个主机怎么做两个网站百度上的网站怎么做
  • 济南建设工程业绩公示的网站wordpress载入等待
  • seo公司名字太原百度seo排名软件
  • 安徽省城乡建设厅网站拼多多关键词排名在哪里看
  • 素材下载网站开发wordpress微信付款插件
  • 网站有什么用河北廊坊建筑模板厂家
  • 永康住房和城乡建设部网站做网站 万户
  • 可信赖的常州网站建设做直播券的网站有多少
  • 网络营销案例分析pptseo策略是什么意思
  • 论坛网站建设视频青岛网站设计软件
  • 租用网站服务器价格清远医院网站建设方案
  • 房地产网站建设方案书福田所有车型
  • 网站功能描述高清视频网络服务器免费
  • 天台做网站微博推广效果怎么样
  • 苏州专门网站网站站长统计怎么做
  • 社交网站开发注意事项call_user_func_array() wordpress
  • 泉州企业免费建站个人网站设计与开发
  • 网站建设流程书籍互联网行业黑话
  • 山亭 网站建设wordpress 添加头像
  • 龙南县建设局网站新手如何做网络推广
  • 网站开发建设赚钱吗巩义旅游网站建设公司
  • 网站建设代码介绍网站顶部导航代码