server.php 4.2 KB
<?php
use Workerman\Worker;
use think\Db;
// 数据库配置信息设置(全局有效)

require_once __DIR__ . '/simplewind/vendor/workerman/workerman/Autoloader.php';
//require_once __DIR__ . '/simplewind/vendor/autoload.php';
//$global_uid = 0;
//
//// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
//function handle_connection($connection)
//{
//    global $text_worker, $global_uid;
//    // 为这个连接分配一个uid
//    $connection->uid = ++$global_uid;
//}
//
//// 当客户端发送消息过来时,转发给所有人
//function handle_message($connection, $data)
//{
//    global $text_worker;
//    foreach($text_worker->connections as $conn)
//    {
//        $conn->send("user[{$connection->uid}] said: $data");
//    }
//}
//
//// 当客户端断开时,广播给所有客户端
//function handle_close($connection)
//{
//    global $text_worker;
//    foreach($text_worker->connections as $conn)
//    {
//        $conn->send("user[{$connection->uid}] logout");
//    }
//}
//
//// 创建一个文本协议的Worker监听2347接口
//$text_worker = new Worker("text://0.0.0.0:2347");
//
//// 只启动1个进程,这样方便客户端之间传输数据
//$text_worker->count = 1;
//
//$text_worker->onConnect = 'handle_connection';
//$text_worker->onMessage = 'handle_message';
//$text_worker->onClose = 'handle_close';
//
//

//
//$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;
//}


// 创建一个Worker监听2347端口,不使用任何应用层协议
$tcp_worker = new Worker("websocket://114.215.223.17:5001");

//$tcp_worker->name='panhaowen';
// 启动4个进程对外提供服务
$tcp_worker->count = 1;

// 当客户端发来数据时
$tcp_worker->onMessage = function($connection, $data)
{
    // 向客户端发送hello $data
    $connection->send('hello '. $data);
    if ($data=='tom') {
        Db::table('user')->where('id',1)->update(['sex'=>1]);
        }
};


Worker::runAll();