项目作者: writethesky

项目描述 :
基于swoole的websocket客户端,websocket client,基于ctp实现了标准的websocket协议(直接通过httpclient,之后进行upgrade,在一些场景中,回出现握手成功,一发送消息就被断开连接的问题,使用此库,可以解决该类问题)
高级语言: PHP
项目地址: git://github.com/writethesky/WebSocketClient.git
创建时间: 2019-09-27T03:41:07Z
项目社区:https://github.com/writethesky/WebSocketClient

开源协议:

下载


websocket client websocket客户端

基于swoole4实现的协程版websocket客户端,直接使用httpclient发送http请求,然后再通过upgrade的方式发送websocket请求,在一些场景下会出现握手成功,一发送消息就被断开连接的情况,本库基于TCP,按照websocket协议标准实现,可避免此类问题的出现

特性

  • 基于swoole4实现
  • 协程
  • 基于TCP实现了标准的websocket协议
  • 支持消息事件绑定

代码示例

  1. use writethesky\WebSocketClient\Client;
  2. use writethesky\WebSocketClient\Frame;
  3. // 需要在协程内
  4. go(function(){
  5. // 创建连接客户端,uri,超时(0,永不超时)
  6. $client = new Client("ws://message.xxx.com/websocket", 0);
  7. // 消息处理回调函数
  8. $onMessage = function($frame) use ($client)
  9. {
  10. // 输出消息内容
  11. var_dump($frame->getPayload());
  12. };
  13. // 绑定消息事件(会开启一个协程, 触发消息回调函数)
  14. $client->on('message', $onMessage);
  15. // 连接
  16. $client->connect();
  17. // 发送文本类型数据
  18. $data = '{"appKey":"aaa","costInIsv":0,"pubTime":1569466912760,"sign":"7F23945DDC29B1B3B89B0AF2CE3521A1","type":"CONNECT"}';
  19. // 数据,类型(text、bin、ping、pong、close),是否掩码处理
  20. $frame = new Frame($data, "text", true);
  21. $client->send($frame);
  22. });

类说明

Client

  • new Client(string $uri, float $timeout)
    — uri 连接地址
    — timeout 超时时间,单位秒,0,永不超时
  • connect() 连接
  • send(Frame $frame) 发送数据
    — frame websocket帧
  • setOrigin(string $origin) 设置来源
  • on(string $event, function $callbak) 绑定事件
    — event 事件名称,暂支持message,其他后续完善
    — callbak 回调函数

Frame

  • new Frame(string $payload, string $type = ‘text’, bool $mask = true)
    — payload 数据
    — type 类型(text、bin、ping、pong、close)
    — mask 是否掩码处理,如果服务端严格实现了websocket协议,客户端必须设置掩码
  • new Frame() 创建帧对象的时候不初始化数据,后续手动设置,但是目前暂时未提供手动设置的方法,不建议采用这种方式创建对象
  • Frame::decode($response) 解码websocket服务端返回的原始数据,返回Frame对象
  • getPayload() 获取帧内数据
  • getType() 获取帧类型
  • getMask() 获取是否掩码
  • getFrame() 获取帧内数据,如果mask为false,与Payload相同,否则为掩码处理后的Payload