server.php 4.3 KB
<?php
require_once __DIR__ . '/simplewind/vendor/autoload.php';
require_once __DIR__ . '/simplewind/vendor/workerman/workerman/Autoloader.php';
use Workerman\Worker;
use think\Db;
use Workerman\Lib\Timer;
//
//$worker = new Worker('websocket://0.0.0.0:1234');
//$worker->count = 1;
//// worker进程启动后创建一个text Worker以便打开一个内部通讯端口
//$worker->onWorkerStart = function($worker)
//{
//    // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
//    $inner_text_worker = new Worker('text://0.0.0.0:5678');
//    $inner_text_worker->onMessage = function($connection, $buffer)
//    {
//        // $data数组格式,里面有uid,表示向那个uid的页面推送数据
//        $data = json_decode($buffer, true);
//        $uid = $data['uid'];
//        // 通过workerman,向uid的页面推送数据
//        $ret = sendMessageByUid($uid, $buffer);
//        // 返回推送结果
//        $connection->send($ret ? 'ok' : 'fail');
//    };
//    // ## 执行监听 ##
//    $inner_text_worker->listen();
//};
//// 新增加一个属性,用来保存uid到connection的映射
//$worker->uidConnections = array();
//// 当有客户端发来消息时执行的回调函数
//$worker->onMessage = function($connection, $data)
//{
//    global $worker;
//    // 判断当前客户端是否已经验证,既是否设置了uid
//    if(!isset($connection->uid))
//    {
//        // 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
//        $connection->uid = $data;
//        /* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
//         * 实现针对特定uid推送数据
//         */
//        $worker->uidConnections[$connection->uid] = $connection;
//        return;
//    }
//};
//
//// 当有客户端连接断开时
//$worker->onClose = function($connection)
//{
//    global $worker;
//    if(isset($connection->uid))
//    {
//        // 连接断开时删除映射
//        unset($worker->uidConnections[$connection->uid]);
//    }
//};
//
//// 向所有验证的用户推送数据
//function broadcast($message)
//{
//    global $worker;
//    foreach($worker->uidConnections as $connection)
//    {
//        $connection->send($message);
//    }
//}
//
//// 针对uid推送数据
//function sendMessageByUid($uid, $message)
//{
//    global $worker;
//    if(isset($worker->uidConnections[$uid]))
//    {
//        $connection = $worker->uidConnections[$uid];
//        $connection->send($message);
//        return true;
//    }
//    return false;
//}
// 数据库配置信息设置(全局有效)
//Db::setConfig(['数据库配置参数(数组)']);

$tcp_worker = new Worker("websocket://114.215.223.17:5001");
$tcp_worker->name='panhaowen';
// 启动4个进程对外提供服务
$tcp_worker->count = 1;


$tcp_worker->uidConnections = array();

//$tcp_worker->onWorkerStart=function ($tcp_worker){
//    Timer::add(10, function()use($tcp_worker)
//    {
//        // 遍历当前进程所有的客户端连接,发送当前服务器的时间
//        foreach($tcp_worker->connections as $connection)
//        {
//            $connection->send(time());
//        }
//    });
//};

$tcp_worker->onConnect = function($connection)
{
    echo $connection->id;
};

// 当客户端发来数据时
$tcp_worker->onMessage = function($connection, $data) {
    global $tcp_worker;
    // 判断当前客户端是否已经验证,即是否设置了uid
    if(!isset($connection->uid))
    {
        // 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
        $connection->uid = $data;
        /* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
         * 实现针对特定uid推送数据
         */
        $tcp_worker->uidConnections[$connection->uid] = $connection;
//        var_dump( $tcp_worker->uidConnections[$connection->uid]);
        return $connection->send('login success, your uid is ' . $connection->uid);
    }


//    $data = json_encode($data);
//    echo $data;
//    echo $connection->id;
//    $re = DB::name('test')->insert()
};


function sendMessageByUid($uid, $message)
{
    global $worker;
    if(isset($worker->uidConnections[$uid]))
    {
        $connection = $worker->uidConnections[$uid];
        $connection->send($message);
    }
}






Worker::runAll();