3、hprose2.X tcpsever和tcpclient

21 篇文章 0 订阅

前言:

核心版本除了提供了客户端的基本实现的基类以外,还提供了 HTTP 客户端和 Socket 客户端。这两个客户端都可以创建为同步或异步客户端。这两个客户端既可以在命令行环境下使用,也可以在 php-fpm 或其他 PHP 环境下使用。

另外 swoole 版本 提供了纯异步的 HTTP 客户端,Socket 客户端和 WebSocket 客户端。Swoole 客户端只能在命令行环境下使用。

其中 HTTP 客户端支持跟 HTTP、HTTPS 绑定的 Hprose 服务器通讯。

Socket 客户端支持跟 TCP、Unix Socket 绑定的 Hprose 服务器通讯,并且支持全双工和半双工两种模式。

WebSocket 客户端支持跟 ws、wss 绑定的 Hprose 服务器通讯。

swoole 版本这里就不演示了,因为该版本使用的swoole版本比较低,应该是1.8左右吧,期待hprose3.0后再使用吧

3.0 以下不建议用 TCP,1.0-2.0 的 TCP 服务器没有请求验证,如果有无效请求发送到服务器,服务器容易崩溃。(作者说的)

1、同步CS 
server.php

<?php
require_once "vendor/autoload.php";

use Hprose\Socket\Server;

function hello($name)
{
    return "Hello $name!";
}

$server = new Server("tcp://0.0.0.0:9501");
$server->addFunction("hello");
$server->start();

client.php

require_once "vendor/autoload.php";
use Hprose\Client;
$client = Client::create("tcp://127.0.0.1:9501",false);
var_dump($client->hello('FADSFADS'));


2、异步CS 
server.php   #不变

<?php
require_once "vendor/autoload.php";

use Hprose\Socket\Server;

function hello($name)
{
    return "Hello $name!";
}

$server = new Server("tcp://0.0.0.0:9501");
$server->addFunction("hello");
$server->start();

client.php

require_once "vendor/autoload.php";
use Hprose\Client;
$client = Client::create("tcp://127.0.0.1:9501");//这里默认是异步
$client->hello('fadfasd')->then(function ($result) {
    var_dump($result);
});


开启服务
在终端输入下面命令
php server.php  #开启服务端

调用:
1、终端命令 php client
2、web访问  http://127.0.0.1:9502/client.php   (自己搭好服务)



3、客户端或者服务端addInvokeHandler
以客户端为例
require_once "vendor/autoload.php";

use Hprose\Client;
use Hprose\Future;

$logHandler = function ($name, array &$args, stdClass $context, Closure $next) {
    error_log("before invoke:");
    error_log($name);
    error_log(var_export($args, true));
    $result = $next($name, $args, $context);
    error_log("after invoke:");
    if (Future\isFuture($result)) {
        $result->then(function ($result) {
            error_log(var_export($result, true));
        });
    } else {
        error_log(var_export($result, true));
    }
    return $result;
};

$client = Client::create("tcp://127.0.0.1:9501",false);
$client->addInvokeHandler($logHandler);
var_dump($client->hello("world"));

服务端一样加入相关代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值