Quellcode durchsuchen

增加断包处理

jace vor 6 Jahren
Ursprung
Commit
cd83770dd4
2 geänderte Dateien mit 33 neuen und 7 gelöschten Zeilen
  1. 32 7
      thinkphp/TCPserver/tcpServer.php
  2. 1 0
      thinkphp/TCPserver/webserver.php

+ 32 - 7
thinkphp/TCPserver/tcpServer.php

@@ -139,7 +139,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
 
         // 向远处的服务器发送信息===========================================================
         $connection_to_tcp = new AsyncTcpConnection('tcp://47.254.202.24:10009');  
-        // $connection_to_tcp = new AsyncTcpConnection('tcp://127.0.0.1:1235');  
+        //$connection_to_tcp = new AsyncTcpConnection('tcp://127.0.0.1:1235');  
 
         $connection_to_tcp->onConnect = function($connection_to_tcp)
         {
@@ -157,27 +157,44 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
             global $index;          //全局的变量
             global $send_data;      //全局的数据
             global $send_order;     //全局的订单号码
-
+            global $recv_buffer;    //存储不完整的数据
             global $rollback_data;   //rollback数据
             global $rollback_index;  //rollback 管理数据序号
 
             $bufExplode = explode("\r\n", $data); //通过指定的分隔符,把字符串打散为数组
             foreach ($bufExplode as $key => $value) {
                 
-                $msg = json_decode($value, true);  //对信息进行处理
-                   // 接口服务器返回的信息
+                
+                if($value){   
+					$msg = json_decode($value, true);  //对信息进行处理
+					if(!$msg){
+						
+					   $recv_buffer.=$value;           //把数据组装起来
+					   $msg1 = json_decode($recv_buffer, true);
+					   if($msg1){
+						  $msg = $msg1;  
+					   }else{
+						  continue;     //解析的不对就跳出循环  
+					   }  
+					}  
+				}else{
+					continue;           //信息不存在就跳出循环
+                }
+                
+                // 接口服务器返回的信息
                 if ($msg['type'] == "get_order_record") {      //查询订单状态
-                    
+                    $recv_buffer = "";
                     sendToWebServer($msg);
 
                 }
                 if ($msg['type'] == "set_current_order") {     //设置当前跟单订单
-
+                    $recv_buffer = "";
                     sendToWebServer($msg);
                     
                 }
 
                 if ($msg['type'] == "insert") {                //Insert请求 (有数据库操作,插入)
+                    $recv_buffer = "";
                     $index++;  //将数据加一
                     $total = count($send_data);  //总数据的长度
                     if($index < $total){
@@ -213,6 +230,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
 
                 }
                 if ($msg['type'] == "rollback") {              //Rollback请求 (有数据库操作,插入并看看是否需要直接返回给前端) 
+                    $recv_buffer = "";
                     $rollback_index++;  //将数据加一
                     $total = count($rollback_data);  //总数据的长度
                     if($rollback_index < $total){
@@ -251,6 +269,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
                 }
 
                 if ($msg['type'] == "except_rollback") {       //retry表中的Rollback请求 (有数据库操作,插入并看看是否需要直接返回给前端) 
+                    $recv_buffer = "";
                     if($msg['error_code']==-2){
                     log_file($msg['error_code']);
                     }else{
@@ -277,6 +296,7 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
 
 
                 if ($msg['type'] == "retry") {                //Retry请求 (有数据库操作 0成功然后更新数据库 )
+                    $recv_buffer = "";
                     if($msg['error_code']==-2){
                         return false;
                     }else{
@@ -292,6 +312,11 @@ $workerTcp->onWorkerStart = function ($workerTcp) {
 
                     }
                 }
+
+                if($msg['type']=="pong"){
+                    $recv_buffer = "";
+                    echo "12345\r\n";
+                }
             }
            
             
@@ -400,7 +425,7 @@ function send_insert($data,$index=0,$order){
     $send_data = $data[$index];                                //将分割的数据交给全局变量
     foreach ($send_data as $key => $value) {
         $send_child['dest_login'] = $value['LOGIN'];           //登录的账号
-        $send_child['percentage'] = intval($value['BALANCE']/$value['step']);    //手数
+        $send_child['percentage'] = $value['ladder'];          //梯度
         array_push($send['dest'],$send_child);
     }
     echo "发送的数据";

+ 1 - 0
thinkphp/TCPserver/webserver.php

@@ -39,6 +39,7 @@ $workerWs->onWorkerStart = function ($workerWs) {
 // 服务器收到信息后执行
 $workerWs->onMessage = function ($connection, $data) {
     $connection->lastMessageTime = time();   //最后的信息时间
+    
     $bufExplode = explode("\r\n", $data);    //通过指定的分隔符,把字符串打散为数组
     foreach ($bufExplode as $key => $value) {