hprose for php

摘要:
“;}$server=newServer;$server-˃addFunction;$server-˃start();创建异步WebSocket客户端$client=HproseSrooleClient::Create;创建WebSocket服务器使用HprosesrooleServer;functionhello{return”你好$name!参数$byref指示它是否为引用参数。如果抛出异常,则返回错误对象,或在此事件中返回具有失败状态的promise对象。$error参数可以声明为引用参数,$error可以在事件中修改。OnError事件此事件仅由HroseSocketServer支持,但其他服务器不支持。当服务器和客户端之间发生通信错误,并且无法将错误发送到客户端时,会触发此事件。

1.客户端和服务器简单DEMO

通过工厂方法 create 创建客户端

$client = HproseClient::create($uriList = null[, $async = true]);

create 方法与构造器函数的参数一样,返回结果也一样。但是第一个参数 $uriList 不能被省略。

使用 create 方法更加方便,因此,除非在创建客户端的时候,不想指定服务地址,否则,应该优先考虑使用 create 方法来创建客户端。

HproseClient::create 支持创建 Hprose 核心库上的客户端,HproseSwooleClient::create 支持创建 swoole 的客户端。例如:

创建一个同步的 HTTP 客户端

$client = HproseClient::create('http://hprose.com/example/', false);

创建 HTTP 服务器

use HproseHttpServer;

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

$server = new Server();
$server->addFunction('hello');
$server->start();
 

创建一个同步的 TCP 客户端

$client = HproseClient::create('tcp://127.0.0.1:1314', false);

创建 TCP 服务器

use HproseSocketServer;

function hello($name) {
    return "Hello $name!";
}
$server = new Server("tcp://0.0.0.0:1314");
$server->addFunction('hello');
$server->start();
 

创建一个异步的 Unix Socket 客户端

$client = HproseClient::create('unix:/tmp/my.sock');

创建 UNIX Socket 服务器

use HproseSocketServer;

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

$server = new Server("unix:/tmp/my.sock");
$server->addFunction('hello');
$server->start();
 

创建一个异步的 WebSocket 客户端

$client = HproseSwooleClient::create('ws://127.0.0.1:8080/');

创建 Web Socket 服务器

use HproseSwooleServer;

function hello($name) {
    return "Hello $name!";
}
$server = new Server("ws://0.0.0.0:8088");
$server->addFunction('hello');
$server->start();

2.事件

onBeforeInvoke 事件

该事件在调用执行前触发,该事件的处理函数形式为:

function($name, &$args, $byref, stdClass $context) { ... }

参数 $name 是服务函数/方法名。 参数 $args 是调用的参数数组,可以声明为引用参数。 参数 $byref 表示是否是引用参数传递。 参数 $context 是该调用的上下文参数。

如果在该事件中抛出异常、返回错误对象、或者返回一个失败(rejected)状态的 promise 对象。则不再执行服务函数/方法。

onAfterInvoke 事件

该事件在调用执行后触发,该事件的处理函数形式为:

function($name, &$args, $byref, &$result, stdClass $context) { ... }

参数 $name 是服务函数/方法名。 参数 $args 是调用的参数数组,可以声明为引用参数。 参数 $byref 表示是否是引用参数传递。 参数 $result 是调用执行的结果,可以声明为引用参数。 参数 $context 是该调用的上下文参数。

如果在该事件中抛出异常、返回错误对象、或者返回一个失败(rejected)状态的 promise 对象。则不再返回结果 $result,而是将错误信息返回给客户端。

onSendError 事件

该事件在服务端发生错误时触发,该事件的处理函数形式为:

function(&$error, stdClass $context) { ... }

如果在该事件中抛出异常、返回错误对象。则该错误会替代原来的错误信息返回给客户端。

$error 参数可以声明为引用参数,在事件中可以对 $error 进行修改。

当服务器与客户端之间发生网络中断性的错误时,仍然会触发该事件,但是不会有错误信息发送给客户端。

onSendHeader 事件

该事件在服务器发送 HTTP 头时触发,该事件的处理函数形式为:

function(stdClass $context) { ... }

如果在该事件中抛出异常,则不再执行后序操作,直接返回异常信息给客户端。

onAccept 事件

该事件在 Socket 或 WebSocket 服务器接受客户端连接时触发,该事件的处理函数形式为:

function(stdClass $context) { ... }

如果在该事件中抛出异常,则会断开跟该客户端的连接。

onClose 事件

该事件在 Socket 或 WebSocket 服务器跟客户端之间的连接关闭时触发,该事件的处理函数形式为:

function(stdClass $context) { ... }

该事件中抛出异常不会对服务器和客户端有任何影响。

onError 事件

该事件仅被 HproseSocketServer 所支持,其它服务器不支持,该事件在服务器与客户端发生通讯错误,无法将错误发送给客户端时触发。该事件的处理函数形式为:

function($error, stdClass $context) { ... }

该事件中抛出异常不会对服务器和客户端有任何影响。

官方使用手册地址:https://github.com/hprose/hprose-php/wiki




免责声明:文章转载自《hprose for php》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python获取Windows CPU和内存占用ASP.NET Core WebApi + EF Core(实现增删改查,使用Swagger测试API)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php全面获取url地址栏及各种参数

  php教程 全面获取url地址栏参数多种方法:$_SERVER["SERVER_PORT"]//获取端口$_SERVER['HTTP_HOST']//获取域名或主机地址$_SERVER['SERVER_NAME']//获取域名或主机地php://input是什么意思?php输入流input的介绍址 注:只是主域名 如xhxu.cn$_SERVER["R...

解决ZendStudio打开utf-8格式的php文件乱码

一般php文件都为utf-8无BOM格式的,用zendstudio默认设置打开时中文会产生乱码,这是因为zendstudio默认设置编码格式为GBK格式,所以我们这里需要重新设置其编码格式,这个是zendstudio9.0.0.4版本,其他版本基本一样 工具/原料 PC ZendStudio 9.0.0.4 方法/步骤 首先用zend...

WebSocket详解

WebSocket 出现前 构建网络应用的过程中,我们经常需要与服务器进行持续的通讯以保持双方信息的同步。通常这种持久通讯在不刷新页面的情况下进行,消耗一定的内存资源常驻后台,并且对于用户不可见。在 WebSocket 出现之前,我们有以下解决方案: 传统轮询(Traditional Polling) 当前Web应用中较常见的一种持续通信方式,通常采取 s...

FTP、SFTP与FTPS

先简单介绍下FTP的基础知识   FTP的传输有两种方式:ASCII、二进制。   FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。 主动模式   FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么...

php获取form表单单选按钮和复选框的值

获取单选按钮的值 在<form>表单中,单选按钮 radio 一般是成一组一组出现的,具有相同 name值 和不同的 value 值,在一组单选按钮中,同一时间只可能有一个被选中。 来举一个单选按钮 radio的例子,在这个代码实例中有两个 name = "sexy" 的单选按钮,选中其中一个并单击"提交"按钮,将会返回被选中的单选按钮的 va...

Linux下PHP的完全卸载

如果想把PHP彻底的卸载干净,直接用yum的remove命令是不行的,而需要查看有多少rpm包,然后按照依赖顺序逐一卸载,在网上查了好多,都是通过 "rpm -qa | grep php" 命令查看有哪些rpm包,然后按照依赖关系依次卸载。 通过命令查看 [root@localhost test]# rpm -qa | grep php php-cli-5...