Swoole WebSocket服务使用Task任务详解 (面向对象方法)

  • 作者: 绝爱七八
  • 博客: https://blog.csdn.net/qq_40193451
  • 日期: 2018.8.24
  • 转载请注明来自绝爱七八的CSDN博客

创建基于swoole的websocket服务**

websoc服务端代码块

如下是使用面向对象方法封装的websocket类:

@requires_authorization
<?php /*** WebSocket Server*/
class WebSocket
{public $server = null;private $host = '0.0.0.0';private $port = 9505;function __construct(){$this->server = new swoole_websocket_server($this->host,$this->port);//设置参数$this->server->set(['document_root' => '/var/www/swoole/html','enable_static_handler' => true,'worker_num' => 2,'task_worker_num' => 4,]);$this->server->on('open', [$this,'onOpen']);$this->server->on('message', [$this,'onMessage']);$this->server->on('task', [$this,'onTask']);$this->server->on('finish', [$this,'onFinish']);$this->server->on('close', [$this,'onClose']);$this->server->start();}public function onOpen($server,$request){var_dump($request->fd);}//form_id线程IDpublic function onTask($server, $task_id, $from_id, $data){print_r($data);sleep(10);return 'on task finish'; //调用finish 或者return告诉线程}public function onFinish($server, $task_id, $data){echo 'finish-task-id-'.$task_id;echo 'finish-success'.$data;// $server->finish($data);}// $frame 是swoole_websocket_frame对象,包含了客户端发来的数据帧信息// $frame->fd,客户端连接的唯一标识socket id,使用$server->push推送数据时需要用到// $frame->data,数据内容,可以是文本内容也可以是二进制数据,可以通过opcode的值来判断// $frame->opcode,WebSocket的OpCode类型,可以参考WebSocket协议标准文档// $frame->finish, 表示数据帧是否完整,一个WebSocket请求可能会分成多个数据帧进行发送(底层已经实现了自动合并数据帧,现在不用担心接收到的数据帧不完整)public function onMessage($server,$frame){echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";$data = ['fd' => $frame->fd,'task' => 1];$this->server->task($data);$this->server->push($frame->fd, "{$frame->data}");}public function onClose($ser, $fd){echo "client {$fd} closed\n";}
}$server = new WebSocket();

客户端代码块

如下是静态ws_client.html页面中使用js 实例化 WebSocket:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>swoole websocket client</title>
</head>
<body><h1>websocket test</h1><script>var wsUrl = "ws://lining.swoole.com:9505";var webSocket = new WebSocket(wsUrl);webSocket.onopen = function(evt){webSocket.send('hello china!');console.log("connected-swoole-success");}webSocket.onmessage = function(evt) {console.log("connected-swoole-success-"+evt.data);}webSocket.onclose = function(evt) {console.log("WebSocketClosed!");}webSocket.onerror = function(evt) { console.log("WebSocketError"); };</script>
</body>
</html>

测试步骤

  • 第一步启动服务 php websocket_server.php,成功如下

  • 第二步浏览器访问静态资源(http://127.0.0.1:9505/ws_client.html)

  • 此时控制台会返回如下结果代表成功

connected-swoole-success 代表连接成功
connected-swoole-success-hello china! 服务端返回的消息

  • 此时服务端返回结果如下代表成功

    注解:这里的最后一句话是10s之后返回.

  • 此上是个人初学swoole的一些分享和心得.也是第一次使用csdn做个人博客技术分享,不喜勿喷.谢谢

  • 如果描述不清楚的方法可以评论.评论必回.共同进步,共同成长

Swoole WebSocket服务使用Task任务详解 (面向对象方法)相关推荐

  1. WINDOWS XP服务和进程优化详解

    WINDOWS XP服务和进程优化详解 1.Alerter Alerter(警示器)服务的进程名是Services.exe(即启动这个服务后在后台运行的进程的名称,可以通过任务管理器看到).Alert ...

  2. Windows 网络服务架构系列课程详解(六) ---利用NLB群集实现WEB服务器的可靠性...

    Windows 网络服务架构系列课程详解(六) -----利用NLB群集实现WEB服务器的可靠性   实验背景: 在大型网络环境中存在这样一种情景,公司内部的FTP服务器出现故障或脱机了,而且不能快速 ...

  3. Windows 网络服务架构系列课程详解(一) ----DHCP服务器的搭建与配置

    Windows 网络服务架构系列课程详解(一) ---------DHCP服务器的搭建与配置   实验背景: 企业网络环境中在没有配置DHCP服务器时,经常会遇到这样的情况,用户不懂怎么去配置IP地址 ...

  4. Linux服务器,服务管理--systemctl命令详解,设置开机自启动

    Linux服务器,服务管理--systemctl命令详解,设置开机自启动 syetemclt就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了. 摘要: syst ...

  5. Spring Cloud (4)---Eureka(服务注册与消费详解)

    Spring Cloud (一)Eureka(服务注册与消费详解) Spring Cloud Eureka(服务注册与消费详解) 1.Spring Cloud Eureka 服务注册中心 Eureka ...

  6. 阿里云容器服务飞天敏捷版详解

    阿里云容器服务飞天敏捷版详解 libinjingshan 2017-04-24 23953浏览量 简介: 阿里云容器服务提供了公共云.专有云以及飞天敏捷版三种部署形态,全方位地满足企业客户利用CaaS ...

  7. 1 企业实战(3) Redis服务部署和配置详解 (资源)

    前言: 环境介绍: CentOS 7.5 Redis 5.0.0 gcc 下载: http://download.redis.io/releases/ 安装redis: [root@localhost ...

  8. 5、SAMBA服务一:参数详解

    ①:SAMBA服务一:参数详解 ②:SAMBA服务二:配置实例 一.SAMBA简介 samba指SMB(Server Message Block,服务器信息块)协议在网络上的计算机之间远程共享Linu ...

  9. 【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

最新文章

  1. Java使用JAX-WS来写webservice时 Unable to create JAXBContext
  2. 【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )
  3. vue判断显示隐藏_web前端进阶之【Vue】10分钟掌握Vue 在学Vue的童鞋过来拿资料
  4. 美团扫码付的前端可用性保障实践
  5. Hexo自定义页面的方法
  6. oracle触发器无效且,oracle创建触发器成功但是插值失败
  7. python种颜色循环_python – 重置Matplotlib中的颜色循环
  8. 怎样和处在“叛逆”阶段的孩子交流沟通?
  9. [导入]使用ASP.NET AJAX的注意事项
  10. 微信小程序+vant组件 侧边导航栏切换显示
  11. Exp2 后门原理与实践 ——20164316张子遥
  12. python多张子图画在一张画布上,显示图例和标题,并保存。
  13. android获取安卓版本,怎么获取android系统当前版本
  14. 区块链网络的价值是啥?
  15. silk lobe资源公众号_关于关注阿拉善盟公共资源交易中心微信公众号的通知
  16. 腾讯云注册与实名图文教程
  17. java steam collect,Java8 Steam 随笔记录
  18. (9)一步一步开发一个简单CAD之镱像和平移
  19. 算法:食物链(并查集)
  20. 第11章,从感知机到支持向量机

热门文章

  1. 浅谈好未来的盈利模式
  2. 彻底明白IP地址如何计算相关地址【收藏】
  3. 谷歌Chrome浏览器的Mac主题 OS theme
  4. php跨域解决办法,PHP跨域问题解决方案
  5. 乡村少年宫计算机小组活动教案,少年宫计算机组教案定稿版.docx
  6. 一文读懂张量分解(展开)和Matlab实现
  7. 面试被问死怎么办?学会这四招,通过的机率提升30%
  8. R语言JAVA对比_R语言统计分析应用与SAS、SPSS的比较
  9. 数据预处理之python实现噪声处理
  10. DSP在线升级程序步骤