2016-05-14 131 views
1

我已經安裝了下面的git的消息:Flynsarmy/PHPWebSocket聊天我的服務器上,併成功建立了聊天,它工作正常,並且用戶可以互相溝通好。PHP的WebSocket - 廣播(發送)從服務器

最近24小時我試圖從另一個PHP文件發送系統消息:

$host = '89.163.140.48'; //where is the websocket server 
$port = 9300; 
$local = "http://www.indiamea.com"; //url where this script run 
$data = '{"message":"TEST - MESSAGE - TEST"}'; //data to be send 

$head = "GET /?token=$jwt HTTP/1.1"."\r\n". 
      "Upgrade: WebSocket"."\r\n". 
      "Connection: Upgrade"."\r\n". 
      "Origin: $local"."\r\n". 
      "Host: $host:$port"."\r\n". 
      "Sec-WebSocket-Key: Bom4DUh5Brl8xmvUYbDQzA=="."\r\n". 
      "Sec-WebSocket-Version: 13"."\r\n". 
      "Content-Length: ".strlen($data)."\r\n"."\r\n"; 

//WebSocket handshake 
$sock = fsockopen($host, $port, $errno, $errstr, 15); 
fwrite($sock, $head) or die('error:'.$errno.':'.$errstr); 
$headers = fread($sock, 2000); 
fwrite($sock, $data) or die('error:'.$errno.':'.$errstr); 
$wsdata = fread($sock, 2000); //receives the data included in the websocket package "\x00DATA\xff" 
fclose($sock); 

WebSocket的是接受該請求(打開事件),但該消息事件不是server.php腳本,內燒製該意味着消息不會發送給用戶。

我試過谷歌搜索,但我找不到任何解決方案。

我真的希望有人能幫助我。

如果需要server.php代碼,你可以在這裏接取它:https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/server.php

+0

也許有人知道一個替代方案我如何模擬發送消息到websocket,所以我可以發送系統消息在我的聊天? –

回答

0

你不能做你想直接做什麼。

雖然你可以間接做到 - 我已經在商業上做到了這一點,我們的解決方案是數據庫輪詢。

所以,你要做的就是在新建的WebSocket服務器循環啓動時,它每隔幾秒鐘(如10秒)運行一次,以檢查數據庫表中標記爲未發送的郵件。如果它找到一個,那麼它會發送它並將其標記爲已發送。

你的PHP後臺可以寫這個表,當然,這樣的數據庫作爲您的WebSocket客戶端/服務器和你的PHP後端之間的中介。

但是,如果你的WebSocket服務器已經在運行一個while循環,那麼這將沒有一個單獨的線程是可能的。