PHP 与 go 交互

2023-09-27 14:51:40 +08:00
 zzzkkk

对于生产环境不允许 exec 函数调用外部程序的情况?

以前知道有 goridge 这种东西 需要 go 启动服务并保持常在

php 再用 http get/post 方式调用 go 服务 这样不是很烦?

比如要用 go 爬 1 万条数据 每次都传 1 万条 这样调用的话无法显示进度 比如每隔一秒向浏览器显示爬了多少条数据

1911 次点击
所在节点    PHP
18 条回复
Rache1
2023-09-27 14:54:44 +08:00
FFI
maocat
2023-09-27 15:00:39 +08:00
加中间件,消息队列
codehz
2023-09-27 15:14:57 +08:00
每次开进程损耗更大吧()
8355
2023-09-27 15:20:55 +08:00
消息队列是主流方案,方便快速扩容,无法独立部署的话可以用 redis stream 5.0 就可以用了。
性能很快,指令都是 o1 ,消息量大的话不如 kafka 或者 mq ,每天百万级没大问题,前期有量可以切独立 redis 便宜的狠。
zzzkkk
2023-09-27 15:21:39 +08:00
@codehz

对于很少用户的系统 根本不用关心 损耗

而是用户体验第一

这个进度条是多么重要啊
Gota
2023-09-27 15:23:53 +08:00
可以放个 Redis 在中间,共享状态,消息队列,广播事件 Redis 都支持,很适合用在爬虫这样的异步任务平台。
Nazz
2023-09-27 15:33:23 +08:00
使用 sidecar 部署, 通过 http 通信
QlanQ
2023-09-27 15:38:37 +08:00
你的这种方式,进度条准吗?
进度条是在浏览器显示的与,go 和 php 的交互方式没有什么关系吧
skiy
2023-09-27 15:47:02 +08:00
走 RPC ?或者走 MQ ( MQTT )。进度条不了解……这东西不要求精准啊。很多熟悉让你进度到 90%,就在那里卡你好久……
awalkingman
2023-09-27 15:51:17 +08:00
进度条是锦上添花,最核心的是把任务完成了,进度条显示一个大概就好了。
通信的话,找个中间件解耦一下是最方便的。
zzzkkk
2023-09-27 16:14:04 +08:00
进度条就是页面用 ajax 请求一个文本文件

server 端 go 每隔一秒去更新这个文件 爬了多少条

还有另一个文本文件 写了总数

这进度是精准的

就几个用户的系统 同一时间只有一个人执行爬虫 搞什么中间件 消息队列
zzzkkk
2023-09-27 16:15:56 +08:00
还好现在 server 都是我控制

想起刚从业时 往图片写文字 gd 扩展用得焦头烂额 都是因为自己没服务器权限

要是自己能管服务器 用 imagick 扩展一下子就解决了
Gota
2023-09-27 16:21:48 +08:00
如果是临时用用的项目当然无所谓,正经项目里还是不建议用本地文件存状态。
devopsdogdog
2023-09-27 16:26:03 +08:00
@zzzkkk 就几个用户的系统 同一时间只有一个人执行爬虫 搞什么中间件 消息队列

你自己都说了,随便输出个日志到服务器能看就行了,是我最多做个 转圈圈 ,知道是执行还是执行完就行了。
sunmoon1983
2023-09-28 08:08:07 +08:00
grpc ?
dif
2023-09-28 09:47:38 +08:00
跨语言目前我用的是 grpc ,java <> python
zzzkkk
2023-09-28 09:48:52 +08:00
java <> python 用 grpc 交互?
guoguoyu
2023-10-31 09:27:22 +08:00
go -> redis <- php-workerman -> 进度条 搞定

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

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

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

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

© 2021 V2EX