目前是這樣的 我想建立長連接 接受淘寶推送過來的消息 進行處理。
淘寶只給出了C# 跟 java 的 代碼
這是C# 的代碼 如下:
TmcClient client = new TmcClient( "appkey" , "appsecret" , "default" ); // 關(guān)于default參考消息分組說明
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)境地址
請問 如果用 workerman 寫的話 應(yīng)該怎么寫呢???? 有類似的例子嗎?
因為我看官方文檔里面
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// 創(chuàng)建一個Worker監(jiān)聽2346端口,使用websocket協(xié)議通訊
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// 啟動4個進程對外提供服務(wù)
$ws_worker->count = 4;
// 當(dāng)收到客戶端發(fā)來的數(shù)據(jù)后返回hello $data給客戶端
$ws_worker->onMessage = function($connection, $data)
{
// 向客戶端發(fā)送hello $data
$connection->send('hello ' . $data);
};
// 運行worker
Worker::runAll();
這是使用WebSocket協(xié)議對外提供服務(wù) 有沒有可以監(jiān)聽 不如淘寶的 ws://mc.api.taobao.com/
這個鏈接的方法了 只要那邊又?jǐn)?shù)據(jù)推送 這邊來業(yè)務(wù)處理數(shù)據(jù)!
需要用php寫一個能解析websocket客戶端協(xié)議的類。
把workerman當(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ā)來的數(shù)據(jù),數(shù)據(jù)是websocket協(xié)議的,
// 有個websocket頭,會是亂碼,要自己按照客戶端websocket協(xié)議解析
};
$con_to_taobao->connect();
};
Worker::runAll();
AsyncTcpConnection異步連接通訊見手冊說明
http://doc3.workerman.net/worker-development/__construct.html