问题标签 [reactphp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
933 浏览

php - 无法完成 SSL/TLS 握手并设置本地证书链文件

我可以使用以下脚本创建 ssl 密钥和证书:

根据需要移动它们:

一切正常。

但是当我手动创建它们时:(w/和w/o使用-sha256)

并像以前一样移动它们,我收到以下错误:

这两组密钥有什么区别,如何手动创建它们?我认为这无关紧要,但它们被用于 Centos7 和 Raspberry Pi 之间的 tcp 套接字连接。

编辑。服务器是使用以下脚本创建的。我没有使用密码。

虚拟错误。 http://php.net/manual/en/context.ssl.php

local_cert string 文件系统上本地证书文件的路径。它必须是包含您的证书和私钥的 PEM 编码文件。它可以选择包含颁发者的证书链。私钥也可以包含在由 local_pk 指定的单独文件中

.

0 投票
1 回答
1194 浏览

php - Ratchet/ReactPHP 循环可以监听多个端口吗?

我已将 ReactPHP 设置为 WebSocket 侦听器,因此我可以向订阅的浏览器发送近乎实时的更新。它看起来像这样:

除了这些类之外,所有这些类Listener都是 Ratchet 的一部分,并且Listener是我的处理程序实现\Ratchet\MessageComponentInterface,它响应连接 WebSockets 的打开/关闭/错误事件。

我希望这个脚本可以被我正在构建的队列系统联系到,因为这是一个系统通道,我想在不同的端口上公开它,这样就无法从互联网上访问它。理想情况下,这将在 HTTP 而不是 WebSocket 上;我已经成功地使用了一个 PHP WebSocket 客户端来联系这个监听器,但是与调用相比,这有点复杂file_get_contents('http://...')

猜测一下,React 的内部循环(例如StreamSelectLoop::streamSelect)只会在短时间内阻塞(参见此处),因此感觉它可以在内部管理许多单独的流。理想情况下,我希望额外的端口由单独的侦听器处理,以实现安全隔离(以防 Guzzle 中的缺陷可能允许攻击者看似来自受限端口,而实际上他们来自互联网港口)。

我认为这不是一个不寻常的要求,但文档中似乎没有任何相关信息,而且 GitHub 问题在这里也相当简单。这种配置是否可以在不设置并行进程或多线程的情况下进行?


此问题的一种解决方案是在 WebSocket 侦听器中为特定消息类型添加 IP 白名单。我可能会在短期内这样做,但在另一个端口上监听会是更好的解决方案。

0 投票
1 回答
130 浏览

php - 在 ReactPHP 中,我可以获取连接本地端的端口号吗?

我在 Docker 环境中运行 ReactPHP 来监听 WebSocket 消息。我像这样使用端口映射功能:

因此,外部端口 10002 映射到容器内部的 8081。

在我的实现中MessageComponentInterface,我有这个事件处理程序:

现在,我正在监听 ReactPHP 中的几个端口,以区分 Internet WebSocket 请求和来自私有 Docker 网络上其他容器的私有消息。所以,为了检测端口,我这样做(使用上面设置的 Guzzle 对象):

但是,这让我得到了 10002(互联网端口)而不是内部容器端端口(8081)。我现在有一个映射设备可以查询关联,但是我可以直接获取容器端口吗?

我正在运行 Ratchet 0.36。

0 投票
1 回答
595 浏览

cakephp - 使用 cakePHP 和 ReactPHP 组合,这可能吗?

是否可以运行 cakePHP 应用程序并将 reactPHP 作为其网络服务器?我听说使用 reactPHP 获得了巨大的性能提升。但是,我还没有看到有人利用现有成熟的 PHP 框架,例如 cake。

0 投票
2 回答
1292 浏览

php - ReactPHP 和 docker:无法将主机从 php 解析到 nginx 容器

我使用 docker 和微服务。假设我们有 3 个服务:

请求通过网关到达服务。我有带有phpand的容器nginx,其中体积是相同的。接下来我给出配置列表:

...

码头工人-compose.yml

如果我使用简单的 cURL,我可以访问酒店和用户 api,我可以从他们那里得到响应,但是如果我尝试使用 reactPHP 来做 - 我做不到!我的代码和平:

线索库只是react. 所以我得到的错误是: DNS query for hotel.api.loc timed out和最后一个错误An error occurred in the underlying stream

所以我有一个问题:我做错了什么?为什么我可以通过 curl 访问 nginx 容器,但无法通过 reactPHP 访问?就算点dns!

但是,如果我使用带有端口的裸 ip,我可以访问它。我不是dns专业人士,只是基础知识。

更新

我使用 Linux Debian(在容器中)。在 Mac 上工作。

关于逻辑:当请求 URIgateway.api.loc/api/hotel/list在网关内部时,我们将请求发送hotel.api.loc到相同的 URL( /api/hotel/list),接受响应并返回它。

我再说一遍,我可以通过 cURL 访问域,但不能用 reactPHP 来做,也不明白为什么......

0 投票
2 回答
303 浏览

php - 如何使用同一个 PHP 运行实例处理多个请求?

众所周知,PHP 在“无共享”的哲学中工作。因此,它受到严重的性能限制。

虽然编译后的脚本可以通过一些缓存扩展来加速,但我们无法避免非常繁重的初始化(例如,我们有一个 Web 服务,每次调用都至少需要解析和引导 DTO 模式、设置数据绑定、连接数据库(持久性 mysql从这个角度来看,连接真的很脏),打开另一个远程服务等等)。

ReactPHP框架似乎也解决了这个问题,但是......是否存在任何轻量级的非框架解决方案?从 hack 方式、单文件示例到轻量级库(不是框架)的任何内容都可以接受。不需要复杂的网络服务器重新创建功能。只处理普通的 POST 请求就足够了。

<offtopic>

任务本身是如此重要,所以我想知道为什么 PHP 还没有提供这个开箱即用的功能......

</offtopic>

0 投票
1 回答
401 浏览

php - 使用 Monolog 和 ReactPHP

我正在尝试在 ReactPHP 引擎之上构建我的 Symfony 应用程序,一切都很好,但是日志。

我的应用程序在开发环境下配置了常规文件日志,在生产环境下配置了 level=error 的简单 syslog 日志。在这两种环境中,我都启用了“调试”,否则即使没有 ReactPHP 并使用简单的 Apache,我在 syslog 中也看不到任何错误。

当我使用 ReactPHP 时,问题就来了。使用 devel 环境初始化 symfony 内核,一切都被记录,但异常。似乎我做错了什么,因为 Monolog 没有处理异常并且正在记录任何错误。

  • 你知道 Symfony 应用程序初始化的任何部分启用了所有这些处理程序(我应该在我的 ReactPHP 文件的内核初始化中添加它)?
  • 如果不是,那么... Symfony 应该在 ReactPHP 下以同样的方式工作,对吧?我的意思是,内核应该始终处理任何错误/异常并按照我在 MonologBu​​ndle 中配置的方式记录它,然后再次抛出异常,对吗?
0 投票
0 回答
408 浏览

php - ReactPHP 对套接字进行同步调用

我对 ReactPHP 相当陌生,但我正在尝试实现一些起初看起来有点棘手的东西。我已经设置了一个 php 脚本,它充当服务器,通过套接字监听连接。建立连接后,它会向连接发送一个字符串。让我们称之为它server.php,它看起来如下:

该文件将作为后台程序在服务器上运行,等待连接,以便将字符串返回给它们。现在,我想要实现的是编写一个客户端文件,它连接到这个“服务器”,并等待,直到它得到他的响应。当它得到响应时,它应该echo输出响应然后退出。(关闭连接和文件)

我想我可以通过创建一个我称之为假循环的东西来做到这一点,客户端进入其中,然后循环直到找到响应,然后退出循环。但是没有更简单的方法来实现这一点吗?

由于以下情况,我需要这个:我的服务器将接受一个密码,我将在初始化时给他,用它来解密一些 API 信息。当有人连接到现在可以访问 API 的服务器时,它应该从它访问的 API 返回一些数据。API 的可见性可以公开,但其他人应该无法在 API 上执行写入命令,而且由于我无法为其创建单独的密钥,一个用于读取数据(应该是公共的),一个用于读取数据对于执行数据(不应该公开),这是我能想象的唯一场景,它仍然保证将数据写入 API 的安全。

0 投票
1 回答
166 浏览

php - CentOs 6、Php7.1、libevent、nginx 返回 502

我正在将 laravel Web 应用程序从 php5.6 升级到 php7.1,这导致我升级 libevent 模块。应用程序是基于反应库的异步 ans。

所以我以安装结束:PHP 7.1.12,libevent:2.1.8 + expressif/pecl-event-libevent。我有来自 nginx 的稳定的“502 Bad Gateway”。没有 libevent (ReactStreamLoop) 或在 PHP 5.6 + libevent:1.4 上工作正常。请求登陆 index.php,稍后在启动应用程序内部发生一些事情。

nginx日志:

2017/11/24 10:41:24 [错误] 24985#0: *7 recv() 在从上游读取响应标头时失败(104:对等方重置连接),客户端:14.183.16.180,服务器:173.199.117.122,请求:“GET / HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“173.199.117.122”

2017/11/24 10:41:25 [错误] 24985#0: *7 recv() 在从上游读取响应标头时失败(104:对等方重置连接),客户端:14.183.16.180,服务器:173.199.117.122,请求:“GET / HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“173.199.117.122”

php-fpm 日志:

[24-Nov-2017 10:41:24] 警告:[pool www] 子 22300 在信号 11 (SIGSEGV) 上退出 39.486978 秒后开始

[2017 年 11 月 24 日 10:41:24] 通知:[池 www] 孩子 22331 开始

[24-Nov-2017 10:41:25] 警告:[pool www] 子 22301 在信号 11 (SIGSEGV) 上退出 40.205103 秒后开始

[24-Nov-2017 10:41:25] 通知:[pool www] 孩子 22332 开始

更新:如果强制使用 ReactStreamLoop 则有效。

更新:在类似配置上本地复制。找到这样的例子,它与 LibEventLoop 一起崩溃,但与 StreamSelectLoop 一起使用。

输出:

0 投票
2 回答
510 浏览

asynchronous - Php 7.1 + Pecl-event + libevent - 在奇怪的情况下挂起

基于这个答案,我已经切换到pecl-event库。我现在有:

下面的例子表现得很奇怪。如果$loop->run()runme()函数内部调用,它会起作用并调用回调。但是如果$loop->run()从外部调用runme(),它会挂起!

运行结果:

我错过了什么还是其中一个库/PHP有问题?有人有运行 php7.1 + react + libevent 的经验吗?

更新:================================================ =====================

我用最新的“react/socket”库“0.8.6”进行了测试。

它工作正常并返回:

但是,如果您进入 \React\Socket\TcpConnector::waitForStreamOnce() 并在新的 Promise 对象中删除 $canceller 函数,如下所示,它会再次挂起。看起来它可以在最新版本的 react 中工作,因为 socket 没有以明显的方式存储,实际上类似于 v0.4.6 中的代码。