使用的业务例子,还是以前文的登录和注册为例
服务器端由php代码编写,客户端由php和java编写。
phpmulserver.php (注意需要使用apache或其它web服务器来运行,由于thrift自身没有提供负载均衡,可考虑用lvs、haproxy、 nginx等等对http请求做负载均衡处理)
registernamespace('thrift', __dir__ . '/../lib');$loader->registerdefinition('com', $gen_dir);$loader->register();if (php_sapi_name() == 'cli') { ini_set(display_errors, stderr);}use thrift\protocol\tbinaryprotocol;use thrift\transport\tphpstream;use thrift\transport\tbufferedtransport;use thrift\tmultiplexedprocessor;use com\penngo\user;class registerservicehandler implements \com\penngo\registerserviceif { public function createuser($name, $psw){ $user = new user(); $user->id = 2; $user->name = $name; $user->password = $psw; return $user; }};class loginservicehandler implements \com\penngo\loginserviceif { public function login($name, $psw){ $user = new user(); if($name == 'penngo' && $psw == '123'){ $user->id = 1; $user->name = 'penngo'; } return $user; }};header('content-type', 'application/x-thrift');if (php_sapi_name() == 'cli') { echo \r\n;}$transport = new tbufferedtransport(new tphpstream(tphpstream::mode_r | tphpstream::mode_w));$protocol = new tbinaryprotocol($transport, true, true);$tmultiplexedprocessor = new tmultiplexedprocessor();$handler = new loginservicehandler();$loginserviceprocessor = new loginserviceprocessor($handler);$tmultiplexedprocessor->registerprocessor(loginservice, $loginserviceprocessor);$registerservice = new registerservicehandler();$registerserviceprocessor = new registerserviceprocessor($registerservice);$tmultiplexedprocessor->registerprocessor(registerservice, $registerserviceprocessor);$transport->open();$tmultiplexedprocessor->process($protocol, $protocol);$transport->close();
php客户端调用
phpmulclient.php
registernamespace('thrift', __dir__ . '/../lib');$loader->registerdefinition('com', $gen_dir);$loader->register();use thrift\protocol\tbinaryprotocol;use thrift\protocol\tmultiplexedprotocol;use thrift\transport\thttpclient;use thrift\transport\tbufferedtransport;use thrift\exception\texception;try {$socket = new thttpclient('localhost', 80, '/thrift/penngo/phpmulserver.php');// $socket = new thttpclient('localhost', 8090, '/thrift/penngo/phpmulserver.php'); $transport = new tbufferedtransport($socket); $protocol = new tbinaryprotocol($transport); $loginprotocol = new tmultiplexedprotocol($protocol, 'loginservice'); $loginservice = new loginserviceclient($loginprotocol); $user = $loginservice->login('penngo', '123'); var_dump($user); $registerprotocol = new tmultiplexedprotocol($protocol, 'registerservice'); $registerservice = new registerserviceclient($registerprotocol); $user = $registerservice->createuser('penngo', '123'); var_dump($user);// $transport->close();} catch (texception $tx) { print 'texception: '.$tx->getmessage().\n;}?>
java客户端
httpclient.java
package com.penngo.main;import org.apache.thrift.*;import org.apache.thrift.protocol.*;import org.apache.thrift.transport.*;import com.penngo.loginservice;import com.penngo.registerservice;import com.penngo.user;public class httpclient { public static void main(string[] args) { try { thttpclient transport = new thttpclient(http://localhost:80/thrift/penngo/phpmulserver.php); 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, 123); if (user2 != null) { system.out.println(创建用户成功: + user2.getid() + + user2.getname()); } else { system.out.println(创建用户失败); }// transport.close(); } catch (texception x) { x.printstacktrace(); } }}
