PHP 页面如何正确地和消息队列通讯?

2018-01-23 14:50:38 +08:00
 enenaaa

非常驻进程的 php 页面,需要等待某个消息的返回。 让 fpm 一直等么。

嗯,不太想用 ajax 轮询的方式。

3169 次点击
所在节点    PHP
15 条回复
killerv
2018-01-23 16:49:36 +08:00
websocket ?
NjcyNzMzNDQ3
2018-01-23 17:13:52 +08:00
workerman 有现成的基于 websocket
sszxcss
2018-01-23 17:17:36 +08:00
workerman 或者 swoole
b821025551b
2018-01-23 17:19:28 +08:00
swoole 吧,貌似以后要官方集成了。
gclove
2018-01-23 17:33:24 +08:00
从道理上说,你不用守护进程还能怎么实现

要实现这个必须要有守护进程,要么只能轮询

你可以不用 PHP 实现
enenaaa
2018-01-23 18:15:46 +08:00
@gclove 有点好奇,非驻留进程的 php 页面怎么对接复杂的业务流程。

比如百度搜索这样。前端 php 运行在 hhvm 内,要等待后端的完成消息, 看他没用 ajax, 不知道是否也是类似 workerman 的常驻机制。
fcten
2018-01-23 18:27:06 +08:00
指定一个回调地址,当消息返回时调用该地址即可。
很多 web 端的异步处理,例如调用支付宝进行支付,都是这么做的。
gclove
2018-01-23 18:32:07 +08:00
@enenaaa 不太明白你说的

你说展示搜索页面的 php 没用 ajax ?

搜索界面在浏览器里, 肯定有通过 ajax 获取关键词推荐 和 结果啊

另外 ajax 只是一种 http 下的一种交互方式,也有其它 RPC 的实现。 可以自己设计

搜索服务提供者 肯定是 java 写的吧
aksoft
2018-01-24 09:18:34 +08:00
golang 欢迎你
enenaaa
2018-01-24 09:57:17 +08:00
@gclove
对链接 https://www.baidu.com/s?wd=%E6%B0%B4%E9%80%86
抓包。 里面第一个 http 请求就返回搜索结果了的。 也就是说,浏览器对前端 php 的请求返回时,php 已经从“消息队列”里得到了业务后端的结果。这样的话,浏览器->php->业务后端->php->浏览器, 这个流程里 php 需要等待业务后端的消息。
我好奇的就是它怎么等的?
enenaaa
2018-01-24 09:57:28 +08:00
@aksoft php 是最好的语言!
gclove
2018-01-24 11:05:55 +08:00
@enenaaa 你这个想法是不对的, 这个可以理解成普通的 url 传参请求。

这里不需要消息队列,你可以理解成成 php 去请求别的 API 数据后输出结果的过程

另外光学一种语言是不行的,大部分前端都会基本使用 php
enenaaa
2018-01-24 11:14:19 +08:00
@fcten 设定回调 uri 地址, 就不是在同一个 http 请求里完成的了。
enenaaa
2018-01-24 11:16:04 +08:00
@gclove 场景是一样的。php 去请求后端 api, 一样要等待呀。 问题是怎么等, 是异步的等, 还是同步的等。fpm 模式的执行方式, 同步等待的效率太低了。
fcten
2018-01-24 14:10:40 +08:00
@enenaaa
什么需求一定要在一个 http 请求里完成?

一个请求 + 懒得编码 -> 同步等待
一个请求 + 异步 -> swoole
多个请求 -> 回调地址

原生的 php 不支持异步,你又嫌同步效率低,又要在一个 http 请求里完成,那就是无解...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425246

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX