TP5.0+Swoole搭建websocket服务,实现pc端与小程序端即时聊天功能

前言

最近接触学习了一点swoole知识,想动手练习一下,一来闲来无事,二来巩固知识,于是便萌生了用swoole搭建websocket,实现小程序与pc后台即时通信功能。第一此做类似这样通讯功能,也没有完整清晰的思路,做的有点缓慢,在做的过程中一步步思考思路才慢慢清晰出来。

正文

  1. 在TP5项目中搭建websocket服务
    在项目根目录下创建server文件夹,在其下新建ws.php文件,作为创建ws服务的脚本。
<?php

use app\common\Websocket;

class Ws {
    const HOST = "0.0.0.0";
    const PORT = 8080;
    
    public $ws = null;
    
    public function __construct()
    {
        $this->ws = new swoole_websocket_server(self::HOST, self::PORT, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);
        
        $this->ws->set([
            'document_root' => __DIR__.'/../public',
            'worker_num' => 2,
            'ssl_key_file' => '/usr/xxx.key',
            'ssl_cert_file' => '/usr/xxx.crt'
        ]);
        
        $this->ws->on('open', [$this, 'onOpen']);
        $this->ws->on('message', [$this, 'onMessage']);
        $this->ws->on('workerstart', [$this, 'onWorkerstart']);
        $this->ws->on('close', [$this, 'onClose']);
        
        $this->ws->start();
    }
    
    //客户端连接后
    public function onOpen($server, $request)
    {
        Websocket::init()->open($this->ws, $request);
    }
    //客户端发送消息
    public function onMessage($server, $fram)
    {
        Websocket::init()->sendMsgAndSave($this->ws, $fram->fd, json_decode($fram->data));
    }
    
    public function onWorkerstart($server, $worker_id)
    {
        // 定义应用目录
        define('APP_PATH', __DIR__ . '/../application/');
        // 1. 加载基础文件
        require __DIR__ . '/../thinkphp/start.php';
        Websocket::init()->flushCache();
    }
	//客户端断开连接
    public function onClose($server, $fd, $reactorId)
    {
        Websocket::init()->removeRedisCache($fd);
    }
}
new Ws();

上方可以看出,我是以8080端口作为websocket服务,因为小程序只支持wss连接,所以需要自己申请域名ssl证书。(原来小程序我记得好像后台设置可信域名只支持80或443端口,不知道哪个版本更新,现在支持其他端口的设置。)

上方四个回调函数里面具体做了哪些事情我们先不急看。先看下onWorkerstart回调函数中,其实就是TP5.0入口文件所做的事情,载入框架信息。(Tips:因为swoole是常驻内存的,所以当改变websocket服务所调用的方法,或者框架核心代码,需要重启websocket服务)

在linux服务器中,进入根目录下执行:php ./server/ws.php 此时websocket服务端便运行起来。

  1. 小程序端连接
var socketTask = wx.con
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值