目前是這樣的 我想建立長(zhǎng)連接 接受淘寶推送過(guò)來(lái)的消息 進(jìn)行處理。
淘寶只給出了C# 跟 java 的 代碼
這是C# 的代碼 如下:
TmcClient client = new TmcClient( "appkey" , "appsecret" , "default" ); // 關(guān)于default參考消息分組說(shuō)明
client.OnMessage += (s, e) =>
{
try
{
Console.WriteLine(e.Message.Topic);
Console.WriteLine(e.Message.Content);
// 默認(rèn)不拋出異常則認(rèn)為消息處理成功
}
catch (Exception exp)
{
Console.WriteLine(exp.StackTrace);
e.Fail(); // 消息處理失敗回滾,服務(wù)端需要重發(fā)
}
};
client.Connect( "ws://mc.api.taobao.com/" ); // 消息環(huán)境地址
請(qǐng)問(wèn) 如果用 workerman 寫(xiě)的話 應(yīng)該怎么寫(xiě)呢???? 有類似的例子嗎?
因?yàn)槲铱垂俜轿臋n里面
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// 創(chuàng)建一個(gè)Worker監(jiān)聽(tīng)2346端口,使用websocket協(xié)議通訊
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// 啟動(dòng)4個(gè)進(jìn)程對(duì)外提供服務(wù)
$ws_worker->count = 4;
// 當(dāng)收到客戶端發(fā)來(lái)的數(shù)據(jù)后返回hello $data給客戶端
$ws_worker->onMessage = function($connection, $data)
{
// 向客戶端發(fā)送hello $data
$connection->send('hello ' . $data);
};
// 運(yùn)行worker
Worker::runAll();
這是使用WebSocket協(xié)議對(duì)外提供服務(wù) 有沒(méi)有可以監(jiān)聽(tīng) 不如淘寶的 ws://mc.api.taobao.com/
這個(gè)鏈接的方法了 只要那邊又?jǐn)?shù)據(jù)推送 這邊來(lái)業(yè)務(wù)處理數(shù)據(jù)!
需要用php寫(xiě)一個(gè)能解析websocket客戶端協(xié)議的類。
把workerman當(dāng)做客戶端來(lái)主動(dòng)向ws://mc.api.taobao.com/ 發(fā)起連接,并接收數(shù)據(jù)。Workerman代碼類似如下
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once './Workerman/Autoloader.php';
$ws_worker = new Worker();
$ws_worker->onWorkerStart = function($ws_worker)
{
$con_to_taobao = new AsyncTcpConnection('tcp://mc.api.taobao.com:80');
$con_to_taobao->onMessage = function($con_to_taobao, $buffer)
{
// $buffer是淘寶發(fā)來(lái)的數(shù)據(jù),數(shù)據(jù)是websocket協(xié)議的,
// 有個(gè)websocket頭,會(huì)是亂碼,要自己按照客戶端websocket協(xié)議解析
};
$con_to_taobao->connect();
};
Worker::runAll();
AsyncTcpConnection異步連接通訊見(jiàn)手冊(cè)說(shuō)明
http://doc3.workerman.net/worker-development/__construct.html