The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
shenmeshibanjiao

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

  •  
  •   shenmeshibanjiao · Dec 11, 2020 · 4017 views
    This topic created in 1978 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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