问题标签 [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.
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 指定的单独文件中
.
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 白名单。我可能会在短期内这样做,但在另一个端口上监听会是更好的解决方案。
php - 在 ReactPHP 中,我可以获取连接本地端的端口号吗?
我在 Docker 环境中运行 ReactPHP 来监听 WebSocket 消息。我像这样使用端口映射功能:
因此,外部端口 10002 映射到容器内部的 8081。
在我的实现中MessageComponentInterface
,我有这个事件处理程序:
现在,我正在监听 ReactPHP 中的几个端口,以区分 Internet WebSocket 请求和来自私有 Docker 网络上其他容器的私有消息。所以,为了检测端口,我这样做(使用上面设置的 Guzzle 对象):
但是,这让我得到了 10002(互联网端口)而不是内部容器端端口(8081)。我现在有一个映射设备可以查询关联,但是我可以直接获取容器端口吗?
我正在运行 Ratchet 0.36。
cakephp - 使用 cakePHP 和 ReactPHP 组合,这可能吗?
是否可以运行 cakePHP 应用程序并将 reactPHP 作为其网络服务器?我听说使用 reactPHP 获得了巨大的性能提升。但是,我还没有看到有人利用现有成熟的 PHP 框架,例如 cake。
php - ReactPHP 和 docker:无法将主机从 php 解析到 nginx 容器
我使用 docker 和微服务。假设我们有 3 个服务:
请求通过网关到达服务。我有带有php
and的容器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 来做,也不明白为什么......
php - 如何使用同一个 PHP 运行实例处理多个请求?
众所周知,PHP 在“无共享”的哲学中工作。因此,它受到严重的性能限制。
虽然编译后的脚本可以通过一些缓存扩展来加速,但我们无法避免非常繁重的初始化(例如,我们有一个 Web 服务,每次调用都至少需要解析和引导 DTO 模式、设置数据绑定、连接数据库(持久性 mysql从这个角度来看,连接真的很脏),打开另一个远程服务等等)。
ReactPHP框架似乎也解决了这个问题,但是......是否存在任何轻量级的非框架解决方案?从 hack 方式、单文件示例到轻量级库(不是框架)的任何内容都可以接受。不需要复杂的网络服务器重新创建功能。只处理普通的 POST 请求就足够了。
<offtopic>
任务本身是如此重要,所以我想知道为什么 PHP 还没有提供这个开箱即用的功能......
</offtopic>
php - 使用 Monolog 和 ReactPHP
我正在尝试在 ReactPHP 引擎之上构建我的 Symfony 应用程序,一切都很好,但是日志。
我的应用程序在开发环境下配置了常规文件日志,在生产环境下配置了 level=error 的简单 syslog 日志。在这两种环境中,我都启用了“调试”,否则即使没有 ReactPHP 并使用简单的 Apache,我在 syslog 中也看不到任何错误。
当我使用 ReactPHP 时,问题就来了。使用 devel 环境初始化 symfony 内核,一切都被记录,但异常。似乎我做错了什么,因为 Monolog 没有处理异常并且正在记录任何错误。
- 你知道 Symfony 应用程序初始化的任何部分启用了所有这些处理程序(我应该在我的 ReactPHP 文件的内核初始化中添加它)?
- 如果不是,那么... Symfony 应该在 ReactPHP 下以同样的方式工作,对吧?我的意思是,内核应该始终处理任何错误/异常并按照我在 MonologBundle 中配置的方式记录它,然后再次抛出异常,对吗?
php - ReactPHP 对套接字进行同步调用
我对 ReactPHP 相当陌生,但我正在尝试实现一些起初看起来有点棘手的东西。我已经设置了一个 php 脚本,它充当服务器,通过套接字监听连接。建立连接后,它会向连接发送一个字符串。让我们称之为它server.php
,它看起来如下:
该文件将作为后台程序在服务器上运行,等待连接,以便将字符串返回给它们。现在,我想要实现的是编写一个客户端文件,它连接到这个“服务器”,并等待,直到它得到他的响应。当它得到响应时,它应该echo
输出响应然后退出。(关闭连接和文件)
我想我可以通过创建一个我称之为假循环的东西来做到这一点,客户端进入其中,然后循环直到找到响应,然后退出循环。但是没有更简单的方法来实现这一点吗?
由于以下情况,我需要这个:我的服务器将接受一个密码,我将在初始化时给他,用它来解密一些 API 信息。当有人连接到现在可以访问 API 的服务器时,它应该从它访问的 API 返回一些数据。API 的可见性可以公开,但其他人应该无法在 API 上执行写入命令,而且由于我无法为其创建单独的密钥,一个用于读取数据(应该是公共的),一个用于读取数据对于执行数据(不应该公开),这是我能想象的唯一场景,它仍然保证将数据写入 API 的安全。
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 一起使用。
输出:
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 中的代码。