swoole websocket

一、websocket介绍

1.1websocket是什么呢?

websocket是一个协议,它仅仅就是一个协议而已,跟我们所了解的http协议、https协议、ftp协议等等一样,都是一种单纯的协议。

1.2websocket的特点呢?

相对于Http这种非持久连接而言,websocket协议是一种持久化连接,它是一种独立的,基于TCP的协议。基于websocket,我们可以实现客户端和服务端双向通信。

在websocket出现之前,为了解决此类问题,常用的解决方法有轮询和long pull,这两种技术都是客户端和服务端建立源源不断的HTTP连接,非常消耗带宽和服务器资源。

websocket是双向持久连接,客户端和服务端只需要第一次建立连接即可实现双向通信。

二、Swoole_websocket简介

Swoole增加了内置的WebSocket服务器支持,通过几行PHP代码就可以写出一个异步非阻塞多进程的WebSocket服务器。


onOpen


WebSocket客户端与服务器建立连接并完成握手后会回调此函数。

$req 是一个Http请求对象,包含了客户端发来的握手请求信息

onOpen事件函数中可以调用push向客户端发送数据或者调用close关闭连接


onOpen事件回调是可选的




onMessage

当服务器收到来自客户端的数据帧时会回调此函数。


$frame 是swoole_websocket_frame对象,包含了客户端发来的数据帧信息

onMessage回调必须被设置,未设置服务器将无法启动

$frame 

$frame 共有4个属性,分别是:

$frame->fd,客户端的socket_id,使用$server->push推送数据时需要用到。

$frame->data,数据内容,可以是文本内容也可以是二进制数据,可以通过opcode的值来判断

$frame->opcode,WebSocket的OpCode类型,可以参考WebSocket协议标准文档

$frame->finish, 表示数据帧是否完整,一个WebSocket请求可能会分成多个数据帧进行发送

Push方法

$fd 客户端连接的ID,如果指定的$fd对应的TCP连接并非websocket客户端,将会发送失败

$data 要发送的数据内容向websocket客户端连接推送数据,长度最大不得超过2M。

$data 如果是文本类型,编码格式必然是UTF-8,这是WebSocket协议规定的

$opcode,指定发送数据内容的格式,默认为文本。发送其它格式可以参考文档常量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是WebSocket呢? WebSocket是HTML5新增的一种通信协议,目标主流的浏览器都支持这个协议,比...
    JunChow520阅读 12,091评论 1 5
  • 三美人的背面,还是美人 毕竟是件连续杀人大案,市领导都十分重视,这耗了半个多月案子总算是破了,张京京手下的这帮人,...
    苏小六Six阅读 3,902评论 0 0
  • 周日去看了《一出好戏》。对于黄渤还是很喜欢,尤其喜欢他演的那些电影。对于此次黄渤自导自演的电影,自是有些期待,并且...
    绿希阅读 4,476评论 2 3
  • 通向自习室的校道,突然冒出了许多盏路灯。可能我这人不大注意,又近视,平时走路也只顾得上眼前一方窄窄的视野,要不是大...
    木缕缕阅读 2,047评论 0 0
  • 往后余生,学会不在乎, 缘深缘浅,全部随缘, 情浓情淡,绝不纠缠, 是聚是散,上天安排, 世间一切,顺其自然。 看...
    月末北北阅读 2,778评论 1 3