当前位置: 首页 > 知识库问答 >
问题:

php - hyperf 不同进程id的情况为什么能通过注入Sender直接发送消息?

周和安
2024-10-03

我对 hyperf 的理解如下:
hyperf 全局一个server,通过不同端口实现多协议支持,父进程监听端口,子进程共享父进程 server,并且可以在任意进程通过注解注入 Sender 实例向客户端发送消息。

我的疑问是 在任意进程通过注解注入 Sender 实例向客户端发送消息这步,在不通过IPC进程间通信的情况下为什么可以直接通过子进程中获取的server的副本向客户端发消息(具体可以看我下面贴出来的截图)?

然而我实际写的一段干净的测试代码表明:父进程监听,子进程通过共享server实例是无法向客户端直接发送消息的,会阻塞卡在那边不执行。

有大神帮忙解答一下吗?

websocket server初始化的代码如下图:

image.png

消息发送的代码如下图

image.png

实际代码运行日志如下图

image.png

共有1个答案

沈嘉瑞
2024-10-03

已解决;原因是hyperf创建子进程的时候通过 $server->addProcess($process) 为子进程绑定了父进程实例化的 $server,让子进程能调用 $server 实例的方法。

文档参考:addProcess

 类似资料:
  • 我在我的应用程序中有两个通道,它们与Kafka的两个主题绑定在一起: 输入 error.input.my-group 问题是我的信息再也不会被推送到Kafka,而是直接送到我的输入通道。我是不是误解了什么?

  • 我对Android的服务有点“问题”。关键是,每次我请求注册id时,服务器都会返回不同的注册id。最糟糕的是,在进行测试后,旧的和新的都正常工作!!(我向老用户和新用户发送推送消息,我的应用程序正在接收来自每一个用户的推送!!)。 这是我正在使用Android服务器中的寄存器: 我不知道我做错了什么,但是,这已经发生在我身上两个月了(或多或少)。在我从来没有遇到过这个问题之前,服务器通常会返回相同

  • 是否可以通过单个TCP连接同时发送各种东西,如消息和文件? 例如,我想在文件发送过程中发送文本命令。有没有可能不让连接变慢太多?如果这是可能的,我将如何实现这一点?我需要用每个数据包的描述ID在数据包中发送它吗? 还是最好打开两个单独的连接?

  • 我已经将“mytest.html”发送到IIS上,这个项目由WebApi Angularjs组成,我无法获得对我的WebApi的正确请求……我不知道为什么? 超文本标记语言代码 【WebApi代码】 [模型代码] 【注册代码】 请注意,我的google chrome控制台中的错误是: 有棱角的js:10695职位http://localhost:60031/api415(不支持的媒体类型) 我也尝

  • 我有一个web应用程序,它通过WebLogic中的JMS与其他Java web应用程序通信。 我读到这样的答案:如何从PHP连接Jms? 我安装了ActiveMQ并尝试使用它。但是在Weblogic中,我们需要“jms_factory”和“queue_name”。我想它使用t3协议。

  • 我在我的代码中为我的机器人配置和一般的东西建立了一个类,我很整洁,所以,客户端不协调。Client()和bot。是我的类在我的bot类中我存储了一些通道ID,然后我注意到了客户端。发送消息(channelid,message)方式不再支持。但是,我将通道id变量编辑为 客户=不和谐。Client()位于我的类之上,它已定义。 我用这个发信息 我期待着那个频道的消息,但现实是: 简而言之,我的cha