我使用了 workman 來監(jiān)聽 http 協(xié)議,但是在我通過頁面發(fā)起請(qǐng)求后,并沒有在 terminal 看到有對(duì) $worker->onmenssaee = function ($connection, $data) { var_dump($data);}; 回調(diào)輸出。請(qǐng)問這是怎么回事呢?
Worker 代碼:
$worker = new Worker('http://192.168.50.168:8800');
// 這里進(jìn)程數(shù)必須設(shè)置為1
$worker->count = 1;
// worker進(jìn)程啟動(dòng)后建立一個(gè)內(nèi)部通訊端口
$worker->onWorkerStart = function($worker)
{
// 開啟一個(gè)內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符
$inner_text_worker = new Worker('Text://192.168.50.168:5678');
$inner_text_worker->onMessage = function($connection, $buffer)
{
global $worker;
// $data數(shù)組格式,里面有uid,表示向那個(gè)uid的頁面推送數(shù)據(jù)
$data = json_decode($buffer, true);
$uid = $data;
print_r($data);
// 通過workerman,向uid的頁面推送數(shù)據(jù)
$ret = sendMessageByUid($uid, $buffer);
// 返回推送結(jié)果
$connection->send($ret ? 'ok' : 'fail');
};
$inner_text_worker->listen();
};
// 新增加一個(gè)屬性,用來保存uid到connection的映射
$worker->uidConnections = array();
// 當(dāng)有客戶端發(fā)來消息時(shí)執(zhí)行的回調(diào)函數(shù)
$worker->onMessage = function($connection, $data)use($worker)
{
var_dump($data); // 這里使用輸出來調(diào)試,但是沒有發(fā)現(xiàn)有輸出
// 判斷當(dāng)前客戶端是否已經(jīng)驗(yàn)證,既是否設(shè)置了uid
if(!isset($connection->uid))
{
// 沒驗(yàn)證的話把第一個(gè)包當(dāng)做uid(這里為了方便演示,沒做真正的驗(yàn)證)
$connection->uid = $data;
/* 保存uid到connection的映射,這樣可以方便的通過uid查找connection,
* 實(shí)現(xiàn)針對(duì)特定uid推送數(shù)據(jù)
*/
$worker->uidConnections = $connection;
return;
}
};
HTML頁面代碼:
<!DOCTYPE html5>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>測(cè)試頁面</title>
</head>
<body>
<form action="http://blog.dev/work" method="get">
<p>
<label>Name:</label>
<input type="text" name="msg" />
<input type="hidden" name="uid" value="uid_2016_06_01" />
</p>
<p><input type="submit" value="發(fā)送" /></p>
</form>
</body>
</html>
確認(rèn)http://blog.dev/work是workerman的地址?
看到你的workerman監(jiān)聽的是8800端口,并不是80端口。
那前端怎么調(diào)起呀var ws = new WebSocket("ws://localhost:9998/echo"); 或者是var ws = new WebSocket("http://localhost:9998/echo");這樣調(diào)起嗎
http://m.wtbis.cn/doc/workerman/http/request.html
文檔剛看到這個(gè)位置 因?yàn)榭吹接袀€(gè)http請(qǐng)求 能獲取cookie 所以測(cè)一下這個(gè) 結(jié)果用var ws = new WebSocket("http://localhost:9998/echo");這種格式調(diào)起不起來 尷尬了