在這篇http://wenda.workerman.net/?/question/508文章中,我按照 walkor 上面的給的案例與步驟來做,最后用把
// 建立socket連接到內(nèi)部推送端口
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1);
// 推送的數(shù)據(jù),包含uid字段,表示是給這個uid推送
$data = array('uid'=>'uid1', 'percent'=>'88%');
// 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符
fwrite($client, json_encode($data)."\n");
// 讀取推送結(jié)果
echo fread($client, 8192);
這段代碼放到test1.php文件,使用php test1.php start,發(fā)現(xiàn)輸出是fail,后來我跟蹤,
發(fā)現(xiàn)在google瀏覽器按f12后,輸入如下代碼:
var ws = new WebSocket('ws://127.0.0.1:1234');
ws.onopen = function(){
var uid = 'uid1';
ws.send(uid);
};
ws.onmessage = function(e){
alert(e.data);
};
連接的時候并未進入以下這段代碼:
$worker->onMessage = function($connection, $data)use($worker)
{
// 判斷當(dāng)前客戶端是否已經(jīng)驗證,既是否設(shè)置了uid
if(!isset($connection->uid))
{
// 沒驗證的話把第一個包當(dāng)做uid(這里為了方便演示,沒做真正的驗證)
$connection->uid = $data;
/* 保存uid到connection的映射,這樣可以方便的通過uid查找connection,
* 實現(xiàn)針對特定uid推送數(shù)據(jù)
*/
$worker->uidConnections = $connection;
return;
}
};
那么請問,這個如何uid是如何得到的?謝謝!
我發(fā)送不知道為什么,我使用google瀏覽器的f12調(diào)試,直接在命令行輸入ws.send('uid');服務(wù)可以接收數(shù)據(jù),但執(zhí)行ws.onopen = function(){ var uid = 'uid1'; ws.send(uid); };這條語句中send沒有發(fā)送數(shù)據(jù)給服務(wù)器,所以造成php后臺在執(zhí)行以下語句后
// 建立socket連接到內(nèi)部推送端口
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1);
// 推送的數(shù)據(jù),包含uid字段,表示是給這個uid推送
$data = array('uid'=>'uid1', 'percent'=>'88%');
// 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符
fwrite($client, json_encode($data)."\n");
// 讀取推送結(jié)果
echo fread($client, 8192);
返回的都是fail語句。
http://wenda.workerman.net/?/question/508
里面的代碼很多人在用了,沒問題的,估計你哪里沒理解對或者搞烏龍了
這個是我測試得出來的結(jié)果,因為我直接和硬件交互的時候,發(fā)現(xiàn)push.php文件是可以收到數(shù)據(jù)的,但用google來測試,發(fā)送“ws.onopen = function(){ var uid = 'uid1'; ws.send(uid); };”這個指令的時候,push.php文件竟然沒有把uid輸出來。