2017-07-19 62 views
0

我有一個工作得很好的套接字服務器,但我試圖實現一些新功能,它不工作。PHP socket服務器在幾分鐘後發送響應

在我的套接字服務器中,我使用$ response字符串向客戶端發送消息。如果該字符串與空值不同,則服務器將該消息發送給客戶端。

的$響應由消息服務器定義的從客戶端得到了第一,例如:

if($data=="CODE:A") 
{ 
    $response="Hello"; 
} 

所以,我需要做的是在3分鐘後發送消息給客戶端,而不是僅此由於睡眠(180)它的工作原理,我的問題是,如果$ data中的代碼等於CODE:C,我需要定義向客戶端發送2個不同的答案。第一條消息必須無等待地發送,第二條消息在3分鐘後發送,例如:

if($data=="CODE:C") 
{ 
    $response = "Msg 1"; 
} 
else if($data=="CODE:C") 
{ 
    sleep(180); 
    $responde = "Msg 2"; 
} 

我的問題是,如果我設置這樣的代碼如上所述,$響應僅在3分鐘後才向客戶端發送消息,並且僅發送第一條消息,第二條消息未被髮送。

如果我把代碼中的第二個,如果最前一頁只有1裏面創建如果3分鐘$響應客戶端後總是消息2

我怎樣才能實現這作品? 我已經嘗試使用$ t = time()+ 180並檢查時間是否等於$ t但沒有任何反應。

+1

'如果($數據==「CODE:C」 ){}否則如果($ data ==「CODE:C」){}',我可能是盲目的或者是某些東西,但是這些條件看起來完全相同。 – Flosculus

+0

你是如何發送消息的?在這裏,你只是設置一個變量值 – apokryfos

+0

也許你不明白,但我想調用這兩個,如果對相同的條件,如我在問題中說,如果我設置這個if($ data ==「CODE: C){$ response =「Msg 1」; sleep(180); $ response =「Msg 2」}響應在180秒後發送,但僅發送消息2,我需要發送消息1和3分鐘後消息2 –

回答

0

寫每一個消息到插座,理想情況下,接收端會知道正確,而不是查詢更多數據的服務器終止插座會話:

if($data=="CODE:C") 
{ 
    fwrite($client, "Msg 1"); //Write the first message to the socket 
    fflush($client); 
    sleep(180);    //Wait 
    fwrite($client, "Msg 2"); //Write the second message to the socket 
} 
+0

感謝您的幫助,但是這個部分有效,現在我可以發送2個消息但是隻在180秒後發送所有消息 –

+0

@AndréPiropo您可能需要刷新句柄緩衝區(檢查更新) – apokryfos

+0

仍然無法正常工作,它在3分鐘後發送兩條消息,而不是一條和3分鐘後其他 –

相關問題