侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

swoole怎么异步调用

swoole  /  管理员 发布于 5年前   371

swoole怎么异步调用?

Swoole中的异步使用

测试案例:

改写ws_server.php

$this->ws->set(    [        'worker_num' => 2,        'task_worker_num' => 2,    ]); $this->ws->on("open", [$this, 'onOpen']);$this->ws->on("message", [$this, 'onMessage']);$this->ws->on("task", [$this, 'onTask']);$this->ws->on("finish", [$this, 'onFinish']);$this->ws->on("close", [$this, 'onClose']); public function onOpen($ws, $request) {    var_dump($request->fd);} public function onMessage($ws, $frame) {    echo "ser-push-message:{$frame->data}\n";    $data = [        'task' => 1,        'fd' => $frame->fd,    ];    $ws->task($data);    $ws->push($frame->fd, "server-push:".date("Y-m-d H:i:s"));} public function onTask($serv, $taskId, $workerId, $data) {    print_r($data);    // 耗时场景 10s    sleep(10);    return "on task finish"; // 告诉worker   }  public function onFinish($serv, $taskId, $data) {    echo "taskId:{$taskId}\n";    echo "finish-data-sucess:{$data}\n";}

客户端,即ws_client.html,发送信息,服务端的onMessage接受并执行设置数据调用onTask,在onTask中打印数据3秒后返回数据给onFinish,onFinish接受数据并输出。

用户页面:

<!DOCTYPE html><head><meta charset="UTF-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title></head><body><h1>chuangxiang--测试</h1><script>var wsUrl = "ws://192.168.0.103:8812"; var websocket = new WebSocket(wsUrl); //实例对象的onopen属性websocket.onopen = function(evt) {    websocket.send("Hello chaungxiang");//输出到服务器端,即发送信息    console.log("connected-swoole-success");//输出在页面} //实例化 onmessagewebsocket.onmessage = function(evt) {    console.log("ws-server-return-data:"+evt.data);} //实例化onclosewebsocket.onclose = function(evt) {    console.log("close");} //实例化onerrorwebsocket.onerror =function(evt,e) {    console.log("error:"+evt.data);}</script></body></html>

浏览器:(客户端)

65de160c45f01014cb87fb4f264d54f.png

服务器:

20996977ed9135881f4f3b428e8dead.png

第一行数据为服务端输出,一开始建立连接的onOpen(),之后先由客户端(ws_client.html)通过js代码连接并发送数据;第二行为发送数据前打印;发送数据到服务端后,执行onMessage();其中再次输出数据并建立task,调用onTask();在其中再次输出数据并返回数据给onFinish();

服务器端直接输出是到服务器,客户端需要通过push,send等发送到服务器

客户端通过console.log打印数据到页面

异步体现

public function onMessage($ws, $frame) {    echo "ser-push-message:{$frame->data}\n";    $data = [        'task' => 1,        'fd' => $frame->fd,    ];    $ws->task($data);    $ws->push($frame->fd, "server-push:".date("Y-m-d H:i:s"));}

这段代码中建立一个task任务之后,不会等到任务执行完之后再push,而是会同时进行。在客户端打印并发送数据后,客户端打印的数据与onMessage中的输出间隔很短,并不会受ontask任务中sleep的影响。

以上就是swoole怎么异步调用的详细内容,更多请关注其它相关文章!


  • 上一条:
    php json转换相关知识(小结)
    下一条:
    oppo无法连接swoole怎么办
  • 昵称:

    邮箱:

    1条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • swoole协程通信之数据处理协程对数据进行读写,保存到协程上下文示例(0个评论)
    • swoole redis连接池应用优化之多协程频繁访问redis(0个评论)
    • php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例(2个评论)
    • php中使用hyperf框架调用文心千帆大模型实现国内版chatgpt功能示例(0个评论)
    • 在hyperf框架中使用基于protobuf的RPC生成器实现rpc服务(1个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-09
    • 2020-03
    • 2020-06
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-11
    • 2022-03
    • 2022-05
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-07
    • 2023-08
    • 2023-11
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客