php和java之thrift

java和php使用thrift

  1. RPC:远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务的方式.RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。

  2. thrift:Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。一种RPC框架。

    • 可以跨语言相互调用,比如java调用php。
    • 使用的4层网络模型。http是7层网络模型。
    • 速度比http要快。

demo:

首先安装thrift:
brew install thrift
文件目录说明:

目录.png

client目录:

   JavaClient:php调用java的client端

  PhpClient: php实现的client端。(php写的server端)

thrift:目录:

test.thrift 生成的client端通信协议文件

lib目录:依赖的thrift的包

server目录:

 thrift:  test.thrift 生成的server端的通信协议文件

 TestServer.php  php实现的server端

 runserver.py  监控端口

 java项目地址:http://pan.baidu.com/s/1c4zE7G

  php项目地址:http://pan.baidu.com/s/1geD2FTL

3.通信协议的定义:文件名:test.thfit

  //查询

 namespace java thrift.service  //生成java时是报名

 namespace php thrift.service    //生成的php的文件路径

 const string version = "1.0.0"

service TestService {    //类名

 // 获取版本号

 string getServiceVersion();

 //方法

  string getData(1:string str,2:i32 id);    //通信协议,传的参数是字符串和整型,返回字符   串。

}

4.java作为server端,php和java作为客户端

 java通过thrift生成通信协议的文件。

 thrfit --gen java test.thrfit

  (1)server端

        实现thrift通信协议      

得到打点值.png

server启动端口:
72fa725d-33e9-4c57-9bdd-d501d170f621-image.png

java作为clent:
9133f3f2-7a32-42e6-b57e-1892c635f54d-image.png

php作为client:

    (1)首先要生成php的客户端的通信文件:  

          thrift —gen php test.thrift 

    (2)导入依赖的lib文件。

    (3)实现client
7067487d-f49a-4c21-8b1d-fb716d2ef02e-image.png

5.php使用thrift.

        用php作为server端时,依赖于服务器。实现方式有两种。

     (1)使用python 启动一个端口监控
7402ba1c-617b-4610-87f8-15b1e6bcc254-image.png

(2)把server端的文件放到apache服务器下面

      注意: 使用第一种方式时,client和server端的文件的第一行加//#!/usr/bin/env php

     第二种方式不用加。

php生成server端时和生成client端的通信文件的命令是不一样的。

server端:thrift -r --gen php:server Test.thrift

7e707fa9-4068-4382-a1f8-fdeac1d2b703-image.png

client端:thrift —gen php test.thrift

ddb25985-81e9-4fe3-90a1-a34b1b651d94-image.png

(1)第一种启动方式:./runserver.py
请求方式: server: php PhpClient.php
(2)第二种启动方式:把php项目放到apache下面
请求方式server: php PhpClient.php

结果:


95ced2b1-62a7-4300-8080-b32e8be9491f-image.png

6.java服务器端和php服务器端区别:

(1)java直接打个jar包,就可以启动一个端口,接受thrift请求。不依赖于服务器,例如tomcat。

(2)php 作为thrift的server端,没有办法自己启动端口,需要依赖于服务器,需要部署在服务器下面。例如apache.

(下面的内容来源于网上,总结的挺好)

8.thfit服务器端:

    1. 创建Handler,用于处理业务逻辑,数据处理接口.
    
    2. 基于Handler创建Processor,数据处理对象
    
    3. 创建Transport(通信方式),数据传输方式
    
    4. 创建Protocol方式(设定传输格式),数据传输协议
    
    5. 基于Processor, Transport和Protocol创建Server
    
    6. 运行Server

9.thrift客户端:

    客户端编写的一般步骤:
    
    1. 创建Transport
    
    2. 创建Protocol方式
    
    3. 基于Transport和Protocol创建Client
    
    4. 运行Client的方法
    
10.数据传输方式,即Protoco

    TBinaryProtocol – 二进制格式.
    
    TCompactProtocol – 压缩格式
    
    TJSONProtocol – JSON格式

11。支持的通信方式即,Transport

    THttpTransport:采用Http传输协议进行数据传输
    
    TSocket:采用TCP Socket进行数据传输
    
    下面几个类主要是对上面几个类地装饰(采用了装饰模式),以提高传输效率。
    
    TBufferedTransport:对某个Transport对象操作的数据进行buffer,即从buffer中读取数据进行传输,或者将数据直接写入buffer
    
    TFramedTransport:以frame(帧:按照固定大小来传输)为单位进行传输,非阻塞式服务中使用。同TBufferedTransport类似,也会对相关数据进行buffer,同时,它支持定长数据发送和接收。
    
    TMemoryBuffer:从一个缓冲区中读写数据

12.服务器端支持的模型。

    TSimpleServer – 简单的单线程服务模型,常用于测试
    
    TThreadedServer - 多线程服务模型,使用阻塞式IO,每个请求创建一个线程。
    
    TThreadPoolServer – 线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。
    
    TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)
    
    处理大量更新的话,主要是在TThreadedServer和TNonblockingServer中进行选择。TNonblockingServer能够使用少量线程处理大量并发连接,但是延迟较高;TThreadedServer的延迟较低。实际中,TThreadedServer的吞吐量可能会比TNonblockingServer高,但是TThreadedServer的CPU占用要比TNonblockingServer高很多。
    
    13.阻塞IO:socket的阻塞意味着必须要做完Io包括错误才会返回。
    
    非阻塞io:无论操作是否完成都会立刻返回。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容