博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2-websocket | 基于 yii2 实现的 WebSocket 扩展
阅读量:6278 次
发布时间:2019-06-22

本文共 2081 字,大约阅读时间需要 6 分钟。

是基于 yii2 实现的 WebSocket 扩展,提供 WebSocket 客户端及 WebSocket 服务端。

底层支持 swooleworkerman 驱动。

workerman的 fd 连接号存在问题,目前推荐使用 swoole 驱动。

为什么需要 WebSocket ?

WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。

了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了 请求/响应 模型。通信请求只能由客户端发起,服务端对请求做出应答处理。

这种通信模型有一个弊端:HTTP 协议无法实现服务器主动向客户端发起消息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。大多数 Web 应用程序将通过频繁的异步JavaScriptXML(AJAX)请求实现长轮询。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。WebSocket 连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。这相比于轮询方式的不停建立连接显然效率要大大提高。

扩展通过底层 swoole/workerman 驱动实现 WebSocket 服务,并提供了客户端及服务端。

安装

安装此扩展程序的首选方法是通过 .

编辑运行

php composer.phar require --prefer-dist yiiplus/yii2-websocket "^1.0.0"复制代码

或添加配置到项目目录下的composer.json文件的 require 部分

"yiiplus/yii2-websocket": "^1.0.0"复制代码

基本使用

配置

return [    'bootstrap' => [        'websocket',    ],    'compoents' => [        'websocket' => [            'class' => '\yiiplus\websocket\
\WebSocket', 'host' => '127.0.0.1', 'port' => 9501, 'channels' => [ 'push-message' => '\xxx\channels\PushMessageChannel', // 配置 channel 对应的执行类 ], ], ],];复制代码

定义 channel 执行类

每个 channel 的功能都需要定义一个单独的类,WebSocket Server 会通过客户端传来的 channel 参数解析。

例如,如果你需要为所有客户端推送一条消息,则该类可能如下所示:

namespace xxx\channels;class PushMessageChannel extends BaseObject implements \yiiplus\websocket\ChannelInterface{    public function execute($fd, $data)    {        return [            $fd, // 第一个参数返回客户端ID,多个以数组形式返回            $data->message // 第二个参数返回需要返回给客户端的消息        ];    }    public function close($fd)    {        return;    }}复制代码

定义好的执行类需要注册到 compoents 配置中的 下。

当客户端断开连接时会触发所有 channels 下的 close 方法,用于清理客户端在服务器上与业务的绑定关系。

客户端发送 channel 消息,触发执行类

Yii::$app->websocket->send(['channel' => 'push-message', 'message' => '用户 xxx 送了一台飞机!']);复制代码

控制台执行

执行任务的确切方式取决于使用的驱动程序。 大多数驱动程序可以使用控制台命令运行,组件需要在应用程序中注册。

此命令启动一个守护进程,该守护进程维护一个 WebSocket Server,根据客户端发来的数据,处理相关 channel 的任务:

yii websocket/start复制代码

资料

  • (有关驱动程序特定控制台命令及其选项的更多详细信息,请参阅此文档)
  • [WebSocket 详细教程](

转载地址:http://onbva.baihongyu.com/

你可能感兴趣的文章
初探Angular6.x---进入用户编辑模块
查看>>
计算机基础知识复习
查看>>
【前端词典】实现 Canvas 下雪背景引发的性能思考
查看>>
大佬是怎么思考设计MySQL优化方案的?
查看>>
<三体> 给岁月以文明, 给时光以生命
查看>>
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>