研究swoole一段时间了,但是swoole对于新手来说还是有一定的难度的,所以今天研究了下,写了一个通用的类库,这样可以直接在框架中引入调用就可以了,不多说,看代码吧.
先看一个代码的结构图:
也许熟悉TP5.1的小伙伴们看出来了,没错,这里面演示的就是在Tp5.0中的调用
先是关键核心的Http.php文件:
<?php
namespace sockets\socket6;
use sockets\socket6\Predis;
require_once 'Predis.php';
/**
* socket面向对象的编译
*/
class Http
{
CONST HOST = '0.0.0.0';
CONST PORT = '12316';
public $ws = null;
public $client = null;
private $key = 'paiv3@$))(';
private $prefix = 'paiv3_';
public $pwd = "/www/wwwroot/wanguopai/swoole/";
public function __construct()
{
// $this->ws=new \swoole_websocket_server(self::HOST,self::PORT,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$this->ws = new \swoole_websocket_server(self::HOST, self::PORT);
$this->ws->set([
//心跳检测
'heartbeat_check_interval' => 60,
'heartbeat_idle_time' => 600,
//设置证书,实现wss连接
// 'ssl_cert_file' => $this->pwd.'pai.wanguo.net.crt',
// 'ssl_key_file' => $this->pwd.'pai.wanguo.net.key',
]);
//监听新端口
$this->client = $this->ws->listen("127.0.0.1", 12317, SWOOLE_SOCK_TCP);
//关闭websocket模式
$this->client->set([
'open_websocket_protocol' => false,
]);
$this->ws->on("start", [$this, 'onStart']);
$this->client->on("receive", [$this, 'onReceive']);
$this->ws->on('message', [$this, 'onmessage']);
$this->ws->on('close', [$this, 'onclose']);
$this->client->on('close', [$this, 'oncloses']);
$this->ws->start();
}
//监听数据接收事件
public function onReceive($serv, $fd, $from_id, $data)
{
$data = json_decode($data, true);
//成交
if ($data['type'] == 'done') {
self::push_room($data['room_id'],$data);
$data['tips']=$room_id."已成交,最终成交价格:¥".$price."元";
//推送全部
self::push_all($data);
}elseif ($data['type'] == 'msg') {
//个人
if ($data['totype']=='single') {
unset($data['totype']);
$id=$data["toid"];
unset($data['toid']);
self::push_single($id,$data);
//房间
}elseif ($data['totype']=='room') {
unset($data['totype']);
$id=$data["toid"];
unset($data['toid']);
self::push_room($id,$data);
//全部
}elseif ($data['