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

workerman怎么實現(xiàn)p2p,通過公網(wǎng)服務器輔助之后,客戶端直連

bogeStore

問題描述

workerman怎么實現(xiàn)p2p,通過公網(wǎng)服務器輔助之后,客戶端直連。既網(wǎng)上說的udp打動

為此你搜索到了哪些方案及不適用的原因

我根據(jù)開發(fā)手冊的udp的案例,服務器和客戶端是可以udp通訊的,但是,拿到對應的ip和port后,客戶端之間就是無法通訊,請問有大神指點一下嗎

服務器端源碼

$http_worker = new Worker("udp://0.0.0.0:9999");
$http_worker->name = "udp_char";
$http_worker->data = ['pc1'=>'', 'pc2'=>''];
$http_worker->count = 1;
// 接收到瀏覽器發(fā)送的數(shù)據(jù)時回復hello world給瀏覽器
$http_worker->onMessage = function($connection, $request) use($http_worker)
{
    $request = json_decode($request, true);
    $http_worker->data[$request['from']] = $connection->getRemoteIp() . ':' . $connection->getRemotePort();

    $data = ['code'=>0, 'socket'=>''];
    if ($http_worker->data[$request['to']]) {
        $data['code'] = 1;
        $data['socket'] = $http_worker->data[$request['to']];
    }
    $connection->send(json_encode($data));
};

Worker::runAll();

客戶端的源碼:

$http_worker = new Worker("udp://0.0.0.0:0");
$http_worker->name = "udp_char";
$http_worker->count = 1;
$http_worker->onWorkerStart = function($worker)
{
    // 2秒后啟動一個udp客戶端,連接
    Timer::add(2, function(){
        $udp_connection = new AsyncUdpConnection('udp://server:9999');
        $udp_connection->onConnect = function(AsyncUdpConnection $udp_connection){
            $udp_connection->time_id = Timer::add(5, function()use($udp_connection){
                $data = ["to"=>"pc2", "from"=>"pc1"];
                $udp_connection->send(json_encode($data));
            });
        };
        $udp_connection->onMessage = function(AsyncUdpConnection $udp_connection, $request){
            // 收到服務端返回的數(shù)據(jù)
            $request = json_decode($request, true);
            if ($request['code']) {
                echo "\t\n------------ 訪問pc2 ----------------\t\n";
                $client = stream_socket_client('udp://' . $request['socket']);
                $data = ["code"=> 1, "msg"=>"wo shi pc1"];
                fwrite($client, json_encode($data));
                stream_socket_sendto($client, "udp數(shù)據(jù)");

                $udp_connection_pc = new AsyncUdpConnection('udp://'.$request['socket']);

                $udp_connection_pc->onConnect = function(AsyncUdpConnection $udp_connection_pc){
                    echo "\t\n連接\t\n";
                    $udp_connection_pc->time_id = Timer::add(5, function()use($udp_connection_pc){
                        echo "\t\n發(fā)數(shù)據(jù)給pc2\t\n";
                        $data = ["code"=> 1, "msg"=>"wo shi pc1"];
                        $udp_connection_pc->send(json_encode($data));
                    });
                };

                $udp_connection_pc->onMessage = function(AsyncUdpConnection $udp_connection_pc, $request){
                    // 收到服務端返回的數(shù)據(jù)
                    var_dump($request);

                };
                $udp_connection_pc->connect();

                Timer::del($udp_connection->time_id);

            }
        };

        $udp_connection->connect();
    }, null, false);
};

$http_worker->onMessage = function($connection, $request)
{
    $data = ["code"=> 1, "msg"=>"wo shi pc1"];
    $udp_connection->send(json_encode($data));
};
Worker::runAll();

求助各路大神,指點指點

1444 2 0
2個回答

ysxpark

udp打洞,我也試過,但沒成功,蹲一下別的大神

  • 暫無評論
縫合

不太好成功,局域網(wǎng)打洞還容易些,公網(wǎng)不太容易。之前打了半天,最后查的是有很多途徑不讓你打洞囧

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??