整個架構(gòu)如下
share_____bridge____________________server ____________________view
共享端開啟bridge,share, 服務器server做來回轉(zhuǎn)發(fā), 遠程桌面連接view 使用mstsc.exe連接
share,放在共享端, share 為3389端口,不用管它 ,win7對應服務remote desktop service開啟即可,
bridge,放在共享端,bridge使用workerman做pipe轉(zhuǎn)發(fā)到3389
server 轉(zhuǎn)發(fā) ,接收view請求轉(zhuǎn)發(fā)給bridge,接收bridge轉(zhuǎn)發(fā)給view
現(xiàn)在問題:
mstsc.exe view,連接server后,偶爾能連上share端,大多時候,連不上!
代碼 如下
share端(bridge)
$ws_worker->onWorkerStart=function()
{
//print_r($worker);
echo "worker starting ....\n";
global $ws_worker;
global $desk_server_ip;
global $i;
//global $bridge_server;
//global $share_bridge;
global $share_bridge;
//bridge_desk_server-----------------------------------------
$share_bridge = new AsyncTcpConnection("tcp://127.0.0.1:3389");
$share_bridge->onConnect = function($share_bridge_conn)
{
$share_bridge_conn->maxSendBufferSize = 10002400;
echo "bridge 連接 3389 ok \r\n";
//service_bridge發(fā)給3389--------------------------------------
//建立連接向左側(cè)發(fā)
$bridge_server = new AsyncTcpConnection("tcp://47.96.173.108:20000");
$bridge_server->onConnect = function($bridge_server)
{
$bridge_server->maxSendBufferSize = 10002400;
echo "bridge_server 連接 ok \r\n ";
$bridge_server->send("bridge");
};
$bridge_server->pipe($share_bridge_conn);
$share_bridge_conn->pipe($bridge_server);
$bridge_server->connect();
};
$share_bridge->connect();
};//onWorkerStart end
Worker::runAll();
server端
$ws_worker->onConnect = function($connection)
{
$connection->maxSendBufferSize = 10002400;
global $i;
global $ws_worker;
$connection->onMessage = function($connection, $data)
{
$connection->maxSendBufferSize = 10002400;
global $ws_worker;
global $i;
// echo $data;
if($data!="")
{
//echo "有數(shù)據(jù).....................\r\n";
}
//簽名
//向客戶端發(fā)送數(shù)據(jù)
if(!isset($connection->uid))
{
$i++;
$connection->uid="";
//如果是mstsc.exe
if(strpos($data,"msts")>-1)
{
$connection->uid="view1";
}
if(strpos($data,"bridge")>-1)
{
//bridge
$connection->uid="bridge";
}
if(strpos($data,"echo_all_client")>-1)
{
//bridge
$connection->uid="echo_all_client";
}
//echo "set uid ";
$ws_worker->uidConnections=$connection;
// echo $connection->uid." login \r\n";
}
if($connection->uid=="echo_all_client")
{
$temp="all UID :::::::::";
foreach($ws_worker->uidConnections as $connection1)
{
//所有設備接收截屏命令
$uid=$connection1->uid;
$temp=$temp. $uid." ";
}
$temp=$temp.":::::::::\r\n";
echo $temp;
///簽名end
$connection->send($temp);
}
//若是view1發(fā)送信息,轉(zhuǎn)發(fā)給service_bridges
if($connection->uid=="view1")
{
//echo "-----------------------view1-------------------";
//
foreach($ws_worker->uidConnections as $connection1)
{
//所有設備接收截屏命令
$uid=$connection1->uid;
//發(fā)給service_brige
if(strpos($uid,"bridge")>-1)
{
echo "收到view1, 轉(zhuǎn)發(fā)給service_bridge";
$connection1->send($data);
}
}
}
//若是bridge發(fā)送信息,轉(zhuǎn)發(fā)給view1
if($connection->uid=="bridge")
{
// echo "-----------------------bridge-------------------";
//
foreach($ws_worker->uidConnections as $connection1)
{
$uid=$connection1->uid;
//發(fā)給service_brige
if(strpos($uid,"view1")>-1)
{
echo "recevive bridge, to view1";
$connection1->send($data);
}
}
}
};
}; //conn結(jié)束