go 服务与 PHP 通信的最佳实践是? - V2EX
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 3807 次点击
    这是一个创建于 1845 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:项目 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     Solana     5220 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:10 PVG 17:10 LAX 01:10 JFK 04:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86