当前位置:首页 > PHP > webman自定义进程

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

webman自定义进程

转载自:workerman 2021-12-01 PHP 2027
分享给朋友:

1、新建文件 process/Rpc.php 编写rpc进程

<?php

namespace process;

use Workerman\Connection\TcpConnection;

class Rpc
{
    public function onMessage(TcpConnection $connection, $data)
    {
        static $instances = [];
        $data   = json_decode($data, true);
        $class  = 'service\\' . $data['class'];
        $method = $data['method'];
        $args   = $data['args'];
        if (!isset($instances[$class])) {
            $instances[$class] = new $class; // 缓存类实例,避免重复初始化
        }
        $connection->send(call_user_func_array([$instances[$class], $method], $args));
    }
}

2、打开 config/process.php 增加配置启动rpc进程

return [
    // ... 这里省略了其它配置...
    'rpc' => [
        'handler' => process\Rpc::class,
        'listen'  => 'text://0.0.0.0:8888', // 这里用了text协议,也可以用frame或其它协议
        'count'   => 8,                     // 可以设置多进程
    ]
];

3、新建 service/User.php 服务 (目录不存在自行创建)

<?php

namespace service;
class User
{
    public function get($uid)
    {
        return json_encode([
            'uid'  => $uid,
            'name' => 'tom'
        ]);
    }
}

4、重启webman php start.php restart

5、客户端调用

<?php
$client  = stream_socket_client('tcp://127.0.0.1:8888');
$request = [
    'class'  => 'User',
    'method' => 'get',
    'args'   => [100], // 100 是 $uid
];
fwrite($client, json_encode($request) . "\n"); // text协议末尾有个换行符"\n"
$result = fgets($client, 10240000);
$result = json_decode($result, true);
var_export($result);

以上客户端代码自己可以封装成一个类

最终结果打印

array (
  'uid' => 100,
  'name' => 'tom',
)


分享给朋友:

相关文章

EasyAdmin8 - PHP8.0常用框架快速后台管理系统

EasyAdmin8 开源快速开发后台,ThinKPHP 、 Laravel、webman 均覆盖

webman-blog 基于 webman 开源博客程序

webman-blog,一个基于 webman 的简单自适应个人博客程序,带后台。

在PHP7+下监控Memcached服务、性能、扇区等信息

PHPMemcachedAdmin:一款网页可视化的Memcached工具

Swoole的PHP协程开发框架 imi 集成ThinkPHP模板引擎 think-template

在 imi 框架根目录中执行composer&nbsp;require&nbsp;topthink/think-template安装好模板引擎后,找到路径\vendor\topthink\think-template\src\Template.php找到 fetch() 渲染模板文件的方法,将最后一

PHP7下MongoDB自增或自减一个字段的值

findAndModify属于原子操作模型数据,所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

PHP的面向对象解析

早期编程由于受电脑硬件限制,程序都是追求效率,而忽略可理解性,扩充性,随着硬件技术的发展,编程越来越重视多人开发,程序员越来越重视程序的可靠性,可扩展性,可维护性,所以刺激了程序语言的发展

PHP8新特性系列:构造器属性提升使用及注意事项

本篇主要说下PHP8构造器属性提升的用法,这个特性对于一些需要在构造器中设置或初始化一些类属性的时候非常有用(包括public、protected和private),比如在PHP7中你可以这样定义一个类的属性,然后在构造方法中传值。class&nbsp;Point&nbsp;{ &nbsp;&nb

ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

PHP常驻内存的多进程任务管理器Composer包。以进程管理为出发点,同时也支持为每个进程设置定时执行功能,您可以用它来完成需要重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理计划任务。

PHP8新特性盘点

PHP 8.0.0 已经正式发布了,这个对于PHPer无疑是一个令人振奋的消息。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match表达式、nullsafe运算符、JIT,并改进了类型系统、错误处理、语法一致性。

ThinkPHP6.0在PHP8下报错解决方法

PHP8下全新安装ThinkPHP6.0.X出现报错,如下Deprecated:&nbsp;Method&nbsp;ReflectionParameter::getClass()&nbsp;is&nbsp;deprecated&nbsp;in&nbsp;xxxx\vendor\topthink\fr