# phprpc **Repository Path**: phps/phprpc ## Basic Information - **Project Name**: phprpc - **Description**: A simple rpc framework based on swoole & thrift 欢迎大家帮忙完善。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2016-10-31 - **Last Updated**: 2021-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # The PHP RPC Micro Service Framework ### Install ```bash git clone https://github.com/kaiyulee/phprpc.git ``` ``` commposer install ``` ### Run ```bash cd /path/to/rpc-service # start server php servers/book.server.php # open a client php clients/book.client.php ``` ### Zookeeper 实现服务注册与发现 **注册**: file: `/servers/book.server.php` ```php #!/usr/bin/env php registerNamespace(SERVICE, GEN_DIR); $loader->registerDefinition(SERVICE, GEN_DIR); $loader->register(); if (php_sapi_name() == 'cli') { ini_set("display_errors", "stderr"); } header('Content-Type', 'application/x-thrift'); if (php_sapi_name() == 'cli') { echo "\r\n"; } try { $zk_host = Fn::C('zookeeper.host'); $zk_port = Fn::C('zookeeper.port'); // 服务自身对应的 ip:port $service_host = Fn::C('service.host'); $service_port = Fn::C('service.port'); $zk = new ZK($zk_host . ':' . $zk_port); Container::set('zk', $zk); /** * 启动时,自注册服务 */ // 准备服务信息 $node_path = Fn::C('service.zk_node'); $node_value = json_encode(['host'=>$service_host, 'port'=>$service_port]); $service = new Service($node_path, $node_value); // 注册到 zk ServiceRegistry::withSharedServer('zk'); // 如果需要指定新的 zookeeper server, 使用 setServer 方法 ServiceRegistry::register($node_path, $service); ... } catch (TException $tx) { print 'TException: '.$tx->getMessage()."\n"; } ``` **发现** file: `/clients/book.client.php` ```php registerNamespace('Thrift', $LIB_PATH); //$loader->registerNamespace('Swoole', $ROOT); $loader->registerNamespace('Book', $GEN_DIR); $loader->registerDefinition('Book', $GEN_DIR); $loader->register(); try { // 发现服务, 各客户端自己实现 // // zk 服务配置可根据客户端的具体环境配置 $zk = new ZK('127.0.0.1:32772'); $zk_service_node = '/service/book'; ServiceDiscovery::setServer($zk); $service = ServiceDiscovery::discover($zk_service_node); if (empty($service)) { die('no service available for this client!'); } $service= json_decode($service, true); $service_host = $service['host']; $service_port = $service['port']; $socket = new TSocket($service_host, $service_port); ... } catch (TException $tx) { print 'TException: '.$tx->getMessage()."\n"; } ```