国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Workerman實現(xiàn)轉(zhuǎn)發(fā)代理

windthesky

Workerman實現(xiàn)轉(zhuǎn)發(fā)代理

主要用于代理MySQL連接,用Navicat Premium直接連接數(shù)據(jù)庫,用不了一會在卡住,用了這個代理就可以流暢使用,也可以用于訪問內(nèi)部數(shù)據(jù)庫或者服務等等。

gitee

https://gitee.com/windthesky/forward_proxy.git

配置

全部在start.php文件中

<?php
/** @noinspection PhpUnused */
/** @noinspection PhpUndefinedFieldInspection */
/** @noinspection PhpObjectFieldsAreOnlyWrittenInspection */
ini_set('memory_limit', '512M');

use Workerman\Connection\AsyncTcpConnection;
use Workerman\Worker;
use Workerman\Connection\TcpConnection;

// 自動加載類
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/common.php';

// 是否寫入日記
const LOG_WRITE = true;
// 是否顯示日記
const SHOW_LOG = true;
// 是否超時關閉
const TIMEOUT_CLOSE = true;
// 超過300秒后發(fā)送消息會先斷開
const TIME = 300;

//接收緩沖區(qū)大小,默認2M,根據(jù)網(wǎng)速和傳輸數(shù)據(jù)大小填寫,影響最終轉(zhuǎn)發(fā)的網(wǎng)速
TcpConnection::$defaultMaxSendBufferSize = 2*1024*1024;
AsyncTcpConnection::$defaultMaxSendBufferSize = 2*1024*1024;

$proxy_list = [
    [
        'type' => 'tcp',
        'host' => '127.0.0.1',
        'port' => 3306,
        'local_port' => 33060,
    ],
];

$app_list = [];
$connect_list = [];
$client_list = [];

/**
 * app收到
 * @param AsyncTcpConnection $app_connection
 * @param $data
 * @return void
 */
function app_message(AsyncTcpConnection $app_connection,$data): void
{
    try {
        write_log('app收到:開始');
        $client_id=$app_connection->client_id;

        global $connect_list;
        write_log(['app收到:',$data]);
        write_log(['app收到-client_id:',$client_id]);
        $connect_list[$client_id]->send($data);
        write_log('app收到-處理完:');
    } catch (Throwable $e) {
        write_log(['app收到:異常==》',$e->getMessage()]);
        $app_connection->close();
    }
}

/**
 * app錯誤
 * @param AsyncTcpConnection $app_connection
 * @return void
 */
function app_error(AsyncTcpConnection $app_connection): void
{
    try {
        write_log('app錯誤:');
        $client_id=$app_connection->client_id;
        global $connect_list;
        $connect_list[$client_id]->close();
        write_log('app錯誤:執(zhí)行完');
    } catch (Throwable $e) {
        write_log(['app錯誤:異常==》',$e->getMessage()]);
    }
}

/**
 * app關閉
 * @param AsyncTcpConnection $app_connection
 * @return void
 */
function app_close(AsyncTcpConnection $app_connection): void
{
    try {
        write_log('app關閉:');
        $client_id=$app_connection->client_id;
        global $connect_list,$app_list;
        $connect_list[$client_id]->close();
        unset($app_list[$client_id]);
        write_log('app關閉:執(zhí)行完');
    } catch (Throwable $e) {
        write_log(['app關閉:異常==》',$e->getMessage()]);
    }
}

//Todo 客戶端連接處理
/**
 * 客戶端連接處理
 * @param TcpConnection $connection
 * @return void
 */
function handle_connection(TcpConnection $connection): void
{
    try {
        write_log('客戶端連接:');
        $connection->lastMessageTime = time();
        global $app_list,$connect_list;
        $client_id = 'client-'.session_create_id();

        $connection->client_id = $client_id;

        $connect_list[$client_id]=$connection;
        $proxy_url=$connection->worker->proxy_url;

        write_log(['客戶端連接:開始==》',$connection->client_id]);

        $app_list[$client_id] = new AsyncTcpConnection($proxy_url);
        $app_list[$client_id]->client_id = $client_id;
        $app_list[$client_id]->onMessage = 'app_message';
        $app_list[$client_id]->onError = 'app_error';
        $app_list[$client_id]->onClose = 'app_close';
        $app_list[$client_id]->connect();

        write_log(['客戶端連接:完成==》',$connection->client_id]);
    } catch (Throwable $e) {
        write_log(['客戶端連接:異常==》',$connection->client_id,$e->getMessage()]);
    }
}

/**
 * 收到消息處理
 * @param TcpConnection $connection
 * @param $data
 * @return void
 */
function handle_message(TcpConnection $connection,$data): void
{
    try {
        write_log(['收到消息:',$data]);
        global $app_list;
        if(TIMEOUT_CLOSE && time()-$connection->lastMessageTime>TIME){
            write_log(['收到消息:超時關閉']);
            $connection->close();
            return;
        }
        $app_list[$connection->client_id]->send($data);
        $connection->lastMessageTime = time();
        write_log(['收到消息:完']);
    } catch (Throwable $e) {
        write_log(['收到消息:異常==》',$connection->client_id,$e->getMessage()]);
    }
}

/**
 * 處理錯誤
 * @param TcpConnection $connection
 * @return void
 */
function handle_error(TcpConnection $connection): void
{
    try {
        write_log(['處理錯誤:開始==》',$connection->client_id]);
        $client_id=$connection->client_id;

        global $app_list;
        if (empty($app_list[$client_id])) return;
        $app_list[$client_id]->close();
        write_log(['處理錯誤:完成==》',$client_id]);
    } catch (Throwable $e) {
        write_log(['處理錯誤:異常==》',$e->getMessage()]);
    }
}

/**
 * 處理關閉
 * @param TcpConnection $connection
 * @return void
 */
function handle_close(TcpConnection $connection): void
{
    try {
        write_log(['處理關閉:開始==》',$connection->client_id]);
        $client_id=$connection->client_id;

        global $app_list,$connect_list;
        if (empty($app_list[$client_id])) return;
        $app_list[$client_id]->close();
        unset($connect_list[$client_id]);
        write_log(['處理關閉:完成==》',$client_id]);
    } catch (Throwable $e) {
        write_log(['處理關閉:異常==》',$e->getMessage()]);
    }
}

$worker = new Worker();

$worker->onWorkerStart = function() {
    global $client_list,$proxy_list;
    foreach($proxy_list as $k=>$v)
    {
        $url=$v['type'].'://0.0.0.0:'.$v['local_port'];
        $proxy_url=$v['type'].'://'.$v['host'].':'.$v['port'];
        echo '監(jiān)聽地址:'.$url.PHP_EOL;
        echo '代理地址:'.$proxy_url.PHP_EOL;
        $client_list[$k] = new Worker($url);
        $client_list[$k]->proxy_key = $k;
        $client_list[$k]->proxy_info = $v;
        $client_list[$k]->proxy_url = $proxy_url;
        $client_list[$k]->onConnect = 'handle_connection';
        $client_list[$k]->onMessage = 'handle_message';
        $client_list[$k]->onError = 'handle_error';
        $client_list[$k]->onClose = 'handle_close';
        $client_list[$k]->listen();
    }
};

Worker::runAll();

啟動

以debug(調(diào)試)方式啟動

php start.php start

以daemon(守護進程)方式啟動

php start.php start -d

停止

php start.php stop

重啟

php start.php restart

平滑重啟

php start.php reload

查看狀態(tài)

php start.php status

Windows 啟動

雙擊start_for_win.bat

1555 3 8
3個評論

Tinywan

支持

  • 暫無評論

厲害厲害!

  • 暫無評論
兔白白

Navicat Premium 連接服務器數(shù)據(jù)庫 確實 一會兒不操作 就卡住了.. 要等好久才響應

  • 暫無評論

windthesky

400
積分
0
獲贊數(shù)
0
粉絲數(shù)
2023-07-26 加入
??