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

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

bogeStore

問(wèn)題描述

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

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

我根據(jù)開(kāi)發(fā)手冊(cè)的udp的案例,服務(wù)器和客戶(hù)端是可以u(píng)dp通訊的,但是,拿到對(duì)應(yīng)的ip和port后,客戶(hù)端之間就是無(wú)法通訊,請(qǐng)問(wèn)有大神指點(diǎn)一下嗎

服務(wù)器端源碼

$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ù)時(shí)回復(fù)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();

客戶(hù)端的源碼:

$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秒后啟動(dòng)一個(gè)udp客戶(hù)端,連接
    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){
            // 收到服務(wù)端返回的數(shù)據(jù)
            $request = json_decode($request, true);
            if ($request['code']) {
                echo "\t\n------------ 訪(fǎng)問(wè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){
                    // 收到服務(wù)端返回的數(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();

求助各路大神,指點(diǎn)指點(diǎn)

1378 2 0
2個(gè)回答

ysxpark

udp打洞,我也試過(guò),但沒(méi)成功,蹲一下別的大神

  • 暫無(wú)評(píng)論
縫合

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

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??