Golang Go语言中服务与PHP通信的最佳实践是?

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中服务与PHP通信的最佳实践是?

背景:项目 excel(使用 phpoffice/phpexcel": "1.8.*)导出功能,如果数据量大经常内存溢出。

解决方案:看到了一些性能对比决定选 Excelize 不选 PhpSpreadsheet,而且顺便可以熟悉一下 go 等方面的东西, 用 Excelize 做一个专门用于操作 excel 导入导出的服务,php 处理数据传递传过来。(go 不处理数据,避免两头改数据处理逻辑)

问题:怎么通信?想法是:

	1,做成长连接,分批发送数据
2,其他方案 rpc,grpc,jsonrpc(这些只用过 jsonrpc)

各位大佬,有什么好的方案吗?另外我应该使用什么框架来简化工作(echo,iris,等?)


更多关于Golang Go语言中服务与PHP通信的最佳实践是?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

16 回复

途啥? php 得 Excel 导出单独出来一个脚本 memory_limit 调大点不就行了?

更多关于Golang Go语言中服务与PHP通信的最佳实践是?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


对于几 M 的小文件,php 服务端毫无压力。
对于当场导出大的 excel 文件,让客户端 js 来生成 excel 文件就行,服务端只负责返回 json 数据。
对于需要离线耗时获取数据的大 excel 文件,建议使用队列来处理生成 excel 文件。

为了双鞋,准备整条流水线?

https://gitee.com/viest/php-ext-xlswriter
你值得拥有,导出甩 phpexcel 几条街

这个得看你数据量到底多大了。通常情况下,php 的内存限制设置为只有百来 M 甚至几十 M,如果你数据量最多也就几百 M 或者 1G 左右的话,直接改内存限制最简单,还不会引入 bug 。

至于想熟悉 go,直接去熟悉即可,建议不要把两件事混在一起做。

https://github.com/mk-j/PHP_XLSXWriter

不想编译用这个也行,PhpSpreadsheet 这玩意太重了,一般导出不用,导入可以用用。

太麻烦,楼上大佬说的是

就这么一个破需求,还需要引入这么大一堆技术栈?你处理这一大堆技术栈的时间远超你写代码时间了

PHP 扩展 php-ext-xlswriter 的导出 Excel,性能很强,之前测试 15 的 MBP 导出 100 万行 30 列数据 4 秒
就是 4 楼的

简单的东西复杂化可不是优秀程序员的做法。

PhpSpreadsheet 其实内置有减少内存的方案,文件缓存或者 redis,一看你就没读完文档

想熟悉 Go 可以私下写这个功能,但不要应用于实际项目。
不然接手你项目的人肯定会骂人的

数据量大会内存溢出用 go 就不会?

好好写 php,php 是世界上最好的语言

如果楼主真想自己动手的话,可以参考 hyperf 框架实现的 GoTask, 一个 swoole 的 sidecar, 不过不知道楼主对 swoole 生态感兴趣不.

针对Golang(Go语言)中服务与PHP通信的最佳实践,以下是一些专业建议:

  1. API接口通信

    • Go语言服务可以定义RESTful API接口,PHP通过HTTP请求(如GET、POST)调用这些接口进行数据交换。
    • 使用JSON或XML等格式传输数据,确保PHP端可以轻松解析。
  2. 共享数据库

    • Go语言和PHP可以共享同一个数据库,通过数据库进行数据交互。
    • 确保数据库表结构和字段在两个语言中都能正确读取和写入。
  3. 消息队列或中间件

    • 使用RabbitMQ、Kafka等消息队列或中间件进行异步通信。
    • PHP将任务发送到消息队列,Go语言监听并消费队列中的任务。
  4. RPC框架

    • 使用gRPC、Thrift等RPC框架实现跨语言的函数调用和远程过程调用。
    • RPC框架可以提供高效的数据传输和调用机制。
  5. 微服务架构

    • 将应用拆分为一系列小型、独立的微服务,PHP和Go语言分别编写不同的微服务。
    • 通过HTTP或其他协议进行通信,实现功能的拆分和隔离。

在实际应用中,可以根据具体需求和场景选择最合适的通信方式。同时,考虑到性能、可扩展性和维护难度等因素,确保所选方案能够满足系统的整体要求。

回到顶部