V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abccccabc
V2EX  ›  PHP

请问 PHP 高手,有什么好用的异步 PHP 框架吗?开箱即用那种

  •  
  •   abccccabc · 2024-03-21 18:03:44 +08:00 · 3037 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想应用的场景主要是:注册后发邮件(异步)、浏览量+1 (异步)等等,都是一些不重要的应用场景。

    如果某框架如 ThinkPHP 或者 Yii 能实现的话,也可以指点一下。

    先学习学习。
    31 条回复    2024-04-18 11:17:16 +08:00
    dobelee
        2
    dobelee  
       2024-03-21 18:06:29 +08:00
    很多年没写 php 了,不清楚现在有没有出新特性。此前异步一般用 swoole 。一定不用 swoole 的话只能转到 mq 。
    zlhsvc
        3
    zlhsvc  
       2024-03-21 18:07:25 +08:00
    丢 redis 队列啊,这两个都有这功能
    yc8332
        4
    yc8332  
       2024-03-21 18:10:50 +08:00   ❤️ 2
    除非你访问量特别大,不然完全不需要走队列。如果比较耗时那就放请求后的 fastcgi_finish_request 执行就好了
    mohuani
        5
    mohuani  
       2024-03-21 18:11:24 +08:00
    也可以扔到 mq 里面,发送邮件的时候,消费 mq 里面的消息
    shinelamla
        6
    shinelamla  
       2024-03-21 18:13:01 +08:00
    workerman ?
    seth19960929
        7
    seth19960929  
       2024-03-21 18:21:00 +08:00
    我只能告诉你没那么简单, 用上了异步, 你的业务写代码的方式也要跟着变的. 已经不是正常的 PHP
    你应该遇到业务解决业务的方法, 而不是从技术框架入手.
    楼上说了很多:
    发邮件 -> 异步队列, 想省事 fastcgi_finish_request (你要用异步的话, 中途重启了怎么办, 失败了怎么处理)
    点赞 直接 redis, 然后定时任务同步就好了
    akiyamamio
        8
    akiyamamio  
       2024-03-21 18:23:13 +08:00
    webman 吧
    abigeater
        9
    abigeater  
       2024-03-21 18:32:41 +08:00
    laravel 有内置? 实现大概就是写入任务在 redis 然后配合守护进程消费? https://learnku.com/docs/laravel/10.x/queues/14873#0796f7
    meshell
        10
    meshell  
       2024-03-21 19:23:45 +08:00
    https://www.php.net/manual/en/function.fsockopen.php 封装下就行了,只要不 read 就可以。
    jonsmith
        11
    jonsmith  
       2024-03-21 19:46:29 +08:00 via Android
    消息队列,最稳。
    ymlluo
        12
    ymlluo  
       2024-03-21 21:59:59 +08:00
    laravel queue
    IdJoel
        13
    IdJoel  
       2024-03-21 22:04:58 +08:00
    amphp swoole workman
    happy32199
        14
    happy32199  
       2024-03-21 22:23:37 +08:00 via iPhone
    试试 amphp php 原生协程和配套库
    vacker
        15
    vacker  
       2024-03-21 22:25:12 +08:00 via iPhone
    你这个需求,我一般用 laravel 的队列开发最快😁
    yekern
        16
    yekern  
       2024-03-21 22:37:26 +08:00
    Laravel 根据你的需求根本就不需要队列实现, 有一个事件系统,使用观察者模式就够用了.
    meshell
        17
    meshell  
       2024-03-22 09:08:12 +08:00
    @yekern 这个事件只是解耦吧,不是异步吧。
    mrpzx001
        18
    mrpzx001  
       2024-03-22 09:42:08 +08:00
    hyperf
    keller
        19
    keller  
       2024-03-22 09:51:23 +08:00
    用 Laravel 队列吧
    star7th
        20
    star7th  
       2024-03-22 11:41:42 +08:00
    Laravel 自带的队列就能解决你的发邮件问题
    putyy
        21
    putyy  
       2024-03-22 13:51:52 +08:00
    Laravel ThinkPHP 都可以实现,也有对应的队列相关包,或者自己写个命令行

    ```php
    while(true){
    // todo redis 出队消费
    sleep(5);
    }
    ```
    cxdLand
        22
    cxdLand  
       2024-03-22 16:36:05 +08:00
    Yii-queue 开箱就用
    abccccabc
        23
    abccccabc  
    OP
       2024-03-22 21:51:52 +08:00
    @cxdLand ```Yii-queue 开箱就用```

    这个是队列吧?还得有一个定时任务去消耗队列?
    changz
        24
    changz  
       2024-03-23 00:31:26 +08:00 via Android
    swoole debug 起来是个灾难
    coderzhangsan
        25
    coderzhangsan  
       2024-03-23 09:23:03 +08:00
    楼上给出很多建议,帮你总结下:

    1. 使用支持异步的框架或包
    a. 基于 swoole 扩展的框架
    b. 基于 workman 的框架
    c. 支持异步的 composer 包, 例如 guzzle/amphp/reactphp

    2. sapi 为 fpm 时, 可以用 fastcgi_finish_request 另类实现,封装一个异步观察者模式库,将阻塞业务放置在 fastcgi_finish_request 函数后执行。
    abccccabc
        26
    abccccabc  
    OP
       2024-03-23 09:27:57 +08:00
    多谢 25L ,我已经在看 reactphp ,毕竟一个 composer 就可以,不需要太多配置。
    GarethChu
        27
    GarethChu  
       2024-03-23 11:29:54 +08:00
    ThinkPHP 不是有个事件监听可以实现你需要的功能
    GarethChu
        28
    GarethChu  
       2024-03-23 11:33:09 +08:00
    @GarethChu 如果异步的话,我觉得还是队列比较稳
    langziyang
        29
    langziyang  
       355 天前
    Yanlongli
        30
    Yanlongli  
       346 天前
    yii 我用的 yii-queue 任务队列,算是伪异步。
    lyxxxh2
        31
    lyxxxh2  
       339 天前
    没有。
    ***
    要知道 php 生态都是 fpm 的。
    socket 的框架,用 fpm 的生态,自己品下。
    最好是直接换语言。

    也不是不能用,就是他不"专业",某些情况,需要你填额外的坑。
    ***
    注册后发邮件: 耗时且不需要等待,队列完事。
    浏览量+1: 难道这操作有 500ms+? 不然就把代码复杂化。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:37 · PVG 08:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.