通过 php-cli 运行 websocket 服务器 stop php-fpm 以响应 nginx
Posted
技术标签:
【中文标题】通过 php-cli 运行 websocket 服务器 stop php-fpm 以响应 nginx【英文标题】:Running websocket server over php-cli stop php-fpm to responds to nginx 【发布时间】:2018-03-24 17:22:04 【问题描述】:我有一个 nginx 服务器,通过端口 8080 提供 http 内容,php-fpm 在 9002 上监听。
除此之外,我还有一个在端口 9090 上运行的 websocket 服务器套接字(也是 php)。
但是当我在命令行中启动我的 websocket 服务器时
php webSocketServer.php
我在端口 8080 上的网络服务器停止响应并卡住了 504 代码。 (超时网关)
我在mac os上使用php7.2
记录事件:
127.0.0.1 - - [24/Mar/2018:17:52:58 +0100] "GET /api/users HTTP/1.1" 504 183 "-" "GuzzleHttp/6.2.1 curl/7.54.0 PHP/7.2.3" "-"
我在 debian 上运行了 iso 环境,并且两者都完美地协同工作。
我跑了
sudo php-fpm -t
[25-Mar-2018 16:08:40.993971] DEBUG: pid 2513, fpm_log_open(), line 50: open access log (/usr/local/Cellar/php/7.2.3_2/log/www.access.log)
[25-Mar-2018 16:08:40.994024] NOTICE: pid 2513, fpm_conf_init_main(), line 1743: configuration file /usr/local/etc/php/7.2/php-fpm.conf test is successful
和
sudo nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
它们都返回成功的配置。
error.log 的输出,调试时的详细程度:
2018/03/26 20:14:20 [debug] 2887#0: timer delta: 1
2018/03/26 20:14:20 [debug] 2887#0: worker cycle
2018/03/26 20:14:20 [debug] 2887#0: kevent timer: 60000, changes: 0
2018/03/26 20:14:20 [debug] 2887#0: kevent events: 1
2018/03/26 20:14:20 [debug] 2887#0: kevent: 5: ft:-2 fl:0025 ff:00000000 d:146988 ud:00007FBF3000E8D1
2018/03/26 20:14:20 [debug] 2887#0: *60 http upstream request: "/index.php?"
2018/03/26 20:14:20 [debug] 2887#0: *60 http upstream dummy handler
2018/03/26 20:14:20 [debug] 2887#0: timer delta: 1
2018/03/26 20:14:20 [debug] 2887#0: worker cycle
2018/03/26 20:14:20 [debug] 2887#0: kevent timer: 59999, changes: 0
我如何重现这种行为:
nginx 和 php-fpm 启动 我的 web socket 服务器是在命令行中启动的 (php run.php) 我运行测试以检查通过 http 请求与我的 Web 应用程序的连接,但没有响应(直到接下来的两个步骤) 我运行测试以检查与我的 websocket 服务器的连接是否正常。 我停止了我的 websocket 服务器(在 http 请求超时 65 之前) php-fpm 响应 nginx...一切正常我可以扣除什么?
我的 web socket 服务器在 php-cli 上运行 stop php-fpm 以将他的响应发送到 nginx...我如何收集我的数据:
ngrep -d 任意端口 9002 检查日志和测试结果但我不知道问题出在哪里。
【问题讨论】:
公网IP地址? 否,在开发环境中运行,本地地址 127.0.0.1 您的服务器有日志吗?还是扩展的错误日志?还是只是504
代码?
是的,客户的回复,给我一个清晰的 504 代码 + 文字说明:“超时网关”但不是更精确@Samuel / 更新后
你在使用任何 PHP 框架吗?您使用什么应用程序来为您的nginx
服务器提供服务?
【参考方案1】:
您提供的信息中没有任何理由解释为什么在端口 9090 上启动服务器会对侦听端口 9001 的另一台服务器产生任何影响。您对问题的描述也是不准确和误导的。网络服务器似乎没有受到影响并且仍在响应。是 php-fpm 不再响应。
假设您没有在系统中构建一些您没有告诉我们的隐藏依赖项,那么您应该从查看in your logs 和 netstat 的输出开始。在启动 websockets 服务器后测试直接从 nginx 提供的内容而不是 php 生成的内容会发生什么这么难吗?
【讨论】:
我有一个曲目。使用 ngrep 我可以看到,如果我停止我的 websocket 服务器,来自 web 服务器的所有响应都会发送 = 在我最初的帖子中添加了更多详细信息。【参考方案2】:这是我对nginx配置的误解。
我已将 nginx.conf 文件中的所有配置集中到 http 范围中,而不是为范围服务器中的每个配置单独的文件。
结构如下:
tcp
http
-- all configurations for server and websocket requests
我所有的 http 请求都在“http”范围内处理。当我的 websocket 服务器启动时,直到 websocket 请求结束,经典的 http 请求才被处理。
新结构如下:
tcp
http
server php #separate file
websocket php #separate file
server spring #separate file
server express #separate file
【讨论】:
以上是关于通过 php-cli 运行 websocket 服务器 stop php-fpm 以响应 nginx的主要内容,如果未能解决你的问题,请参考以下文章
受祝福的服务器(Node.js)通过 websocket 到浏览器中的 Xterm.js 客户端
如何在 Ubuntu 14.04 上更改 php-cli 版本?