审查视图

潘浩文 authored
1 2
<?php
use Workerman\Worker;
潘浩文 authored
3 4
use think\Db;
require_once __DIR__ . '/simplewind/vendor/workerman/workerman/Autoloader.php';
潘浩文 authored
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

//$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端口,不使用任何应用层协议
潘浩文 authored
124
$tcp_worker = new Worker("websocket://114.215.223.17:5001");
潘浩文 authored
125
潘浩文 authored
126
//$tcp_worker->name='panhaowen';
潘浩文 authored
127
// 启动4个进程对外提供服务
潘浩文 authored
128
$tcp_worker->count = 1;
潘浩文 authored
129 130 131 132 133 134 135 136 137 138 139

// 当客户端发来数据时
$tcp_worker->onMessage = function($connection, $data)
{
    // 向客户端发送hello $data
    $connection->send('hello ' . $data);
};


Worker::runAll();