tp5.0安装 workerman和运行 websocket

第一步:cmd 到项目根目录运行
1 :composer require topthink/think-worker=1.0.* -vvv

windows下需要运行(tp5手册:https://www.kancloud.cn/manual/thinkphp5/235128)

2: composer require workerman/workerman-for-win
第二步
public 目录新建server .php文件

define(‘APP_PATH’, DIR . ‘/…/application/’);
define(‘BIND_MODULE’,‘push/Worker’);
// 加载框架引导文件
require DIR . ‘/…/thinkphp/start.php’
push/Worker文件内容


namespace app\danmu\controller;

use think\worker\Server;

class Worker extends Server
{
    protected $socket = 'websocket://0.0.0.0:2345';
    protected $processes = 1;
    protected $worker;

    public function __construct()
    {
        parent::__construct();
        $this->worker->uidConnections = array();
    }


    /**
     * 收到信息
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
        $uid = $connection->uid;
        if($uid){
            $this->worker->uidConnections[$uid] = $connection;
            $this->broadcast($data);
        }
    }

    // 向所有验证的用户推送数据
    function broadcast($message)
    {
        foreach($this->worker->uidConnections as $connection)
        {
            $connection->send($message);
        }
    }

    // 针对uid推送数据
    function sendMessageByUid($uid, $message)
    {
        if(isset($this->worker->uidConnections[$uid]))
        {
            $connection = $this->worker->uidConnections[$uid];
            $connection->send($message);
        }
    }

    /**
     * 当连接建立时触发的回调函数
     * @param $connection
     */
    public function onConnect($connection)
    {
        $connection->onWebSocketConnect = function($connection , $http_header)
        {
             // 可以在这里判断连接来源是否合法,不合法就关掉连接
             // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket连接
//            if($_SERVER['HTTP_ORIGIN'] != 'http://bw.aiqi-inc.com' || empty($_GET['token']))
//            {
//                $connection->close();
//            }
            // onWebSocketConnect 里面$_GET $_SERVER是可用的
//            print_r($_SERVER['HTTP_ORIGIN']);
            $connection->uid = $_GET['token'];
//             var_dump($_GET, $_SERVER);
        };
    }

    /**
     * 当连接断开时触发的回调函数
     * @param $connection
     */
    public function onClose($connection)
    {

    }

    /**
     * 当客户端的连接上发生错误时触发
     * @param $connection
     * @param $code
     * @param $msg
     */
    public function onError($connection, $code, $msg)
    {
        echo "error $code $msg\n";
    }

    /**
     * 每个进程启动
     * @param $worker
     */
    public function onWorkerStart($worker)
    {

    }
}

cmd 项目中到public目录下运行php server.php 打开监听

第三步 浏览器:
浏览器打开项目运行 console

ws = new WebSocket(“ws://127.0.0.1:3344”);
ws.onopen = function() {
alert(“连接成功”);
ws.send(‘tom’);
alert(“给服务端发送一个字符串:tom”);
};
ws.onmessage = function(e) {
alert(“收到服务端的消息:” + e.data);
};
ƒ (e) {
alert(“收到服务端的消息:” + e.data);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值