V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
shenmeshibanjiao
V2EX  ›  Go 编程语言

go 服务与 PHP 通信的最佳实践是?

  •  
  •   shenmeshibanjiao · 2020-12-11 10:40:09 +08:00 · 3311 次点击
    这是一个创建于 1436 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    15 条回复    2020-12-11 15:09:32 +08:00
    linoder
        1
    linoder  
       2020-12-11 10:48:24 +08:00   ❤️ 1
    途啥? php 得 Excel 导出单独出来一个脚本 memory_limit 调大点不就行了?
    zjsxwc
        2
    zjsxwc  
       2020-12-11 10:58:26 +08:00
    对于几 M 的小文件,php 服务端毫无压力。
    对于当场导出大的 excel 文件,让客户端 js 来生成 excel 文件就行,服务端只负责返回 json 数据。
    对于需要离线耗时获取数据的大 excel 文件,建议使用队列来处理生成 excel 文件。
    askfilm
        3
    askfilm  
       2020-12-11 11:00:01 +08:00   ❤️ 1
    为了双鞋,准备整条流水线?
    yekern
        4
    yekern  
       2020-12-11 11:00:42 +08:00   ❤️ 3
    https://gitee.com/viest/php-ext-xlswriter
    你值得拥有,导出甩 phpexcel 几条街
    GM
        5
    GM  
       2020-12-11 11:01:59 +08:00
    这个得看你数据量到底多大了。通常情况下,php 的内存限制设置为只有百来 M 甚至几十 M,如果你数据量最多也就几百 M 或者 1G 左右的话,直接改内存限制最简单,还不会引入 bug 。

    至于想熟悉 go,直接去熟悉即可,建议不要把两件事混在一起做。
    ChoateYao
        6
    ChoateYao  
       2020-12-11 11:55:50 +08:00   ❤️ 1
    https://github.com/mk-j/PHP_XLSXWriter

    不想编译用这个也行,PhpSpreadsheet 这玩意太重了,一般导出不用,导入可以用用。
    Lemeng
        7
    Lemeng  
       2020-12-11 12:08:46 +08:00
    太麻烦,楼上大佬说的是
    sadfQED2
        8
    sadfQED2  
       2020-12-11 12:20:06 +08:00 via Android
    就这么一个破需求,还需要引入这么大一堆技术栈?你处理这一大堆技术栈的时间远超你写代码时间了
    ben1024
        9
    ben1024  
       2020-12-11 12:33:05 +08:00
    PHP 扩展 php-ext-xlswriter 的导出 Excel,性能很强,之前测试 15 的 MBP 导出 100 万行 30 列数据 4 秒
    就是 4 楼的
    whoisix
        10
    whoisix  
       2020-12-11 12:55:50 +08:00 via Android
    简单的东西复杂化可不是优秀程序员的做法。
    ritaswc
        11
    ritaswc  
       2020-12-11 13:56:46 +08:00
    PhpSpreadsheet 其实内置有减少内存的方案,文件缓存或者 redis,一看你就没读完文档
    xiaomu8
        12
    xiaomu8  
       2020-12-11 14:18:03 +08:00
    想熟悉 Go 可以私下写这个功能,但不要应用于实际项目。
    不然接手你项目的人肯定会骂人的
    sunznx
        13
    sunznx  
       2020-12-11 14:40:08 +08:00
    数据量大会内存溢出用 go 就不会?
    qq1340691923
        14
    qq1340691923  
       2020-12-11 14:41:27 +08:00
    好好写 php,php 是世界上最好的语言
    bagheer
        15
    bagheer  
       2020-12-11 15:09:32 +08:00
    如果楼主真想自己动手的话,可以参考 hyperf 框架实现的 GoTask, 一个 swoole 的 sidecar, 不过不知道楼主对 swoole 生态感兴趣不.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2902 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:33 · PVG 22:33 · LAX 06:33 · JFK 09:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.