案例描述:
我要用thinkphp做一個(gè)接口,供第三方調(diào)用傳過(guò)來(lái)數(shù)據(jù),我這邊拿到數(shù)據(jù)后需要通過(guò)websocket直接連接通訊服務(wù)器,所以,我只需要workerman作為客戶端使用,不需要作為server端?,F(xiàn)在的問(wèn)題是thinkphp接口拿到的數(shù)據(jù),如何傳入workerman的客戶端內(nèi)
不勝感激
為啥不是workerman里面調(diào)用thinkphp里面接口數(shù)據(jù)
因?yàn)椴⒉恢赖谌绞裁磿r(shí)候調(diào)用api,第三方調(diào)用了api傳了數(shù)據(jù),就需要將數(shù)據(jù)通過(guò)websocket傳到websocket server去,整個(gè)過(guò)程沒(méi)有web頁(yè)面,只是接口或后臺(tái)的處理
那你發(fā)送數(shù)據(jù)到websocket server服務(wù)里面 在服務(wù)里面處理傳過(guò)來(lái)的值的時(shí)候 調(diào)用接口數(shù)據(jù)并處理
@8039:所以我必須在中間再架一層,提供restful接口給第三方用,拿到數(shù)據(jù)通過(guò)websocket傳給websocket server
我單獨(dú)用workerman作為客戶端跑,連接websocket server沒(méi)有問(wèn)題,tp寫(xiě)接口也可以,現(xiàn)在就是不知道tp接口拿到的數(shù)據(jù)如何傳入workerman客戶端。或者大佬們有其他的實(shí)現(xiàn)方式也可以,再次感謝
你是用的gateway嗎?
$data['demo'] = 1233;
call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);
接收的值在onMessage里面的類(lèi)型里面去處理
沒(méi)有用到gateway,查了下,網(wǎng)上都說(shuō)的是gateway做server,gatewayclient與gateway通訊,好像也不太符合
workerman作為客戶端的代碼如下:
require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php';
require_once __DIR__ . '/../../extend/proto/GPBMetadata/Message.php';
use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
$task = new \Workerman\Worker();
$task->onWorkerStart = function ($task) {
// 不支持直接指定http,但是可以用tcp模擬http協(xié)議發(fā)送數(shù)據(jù)
$connection = new \Workerman\Connection\AsyncTcpConnection('ws://xxx.xxx.xxx.xxx:1234');
// 當(dāng)連接建立成功時(shí),發(fā)送http請(qǐng)求數(shù)據(jù)
$connection->onConnect = function ($connection) {
$token = "token";
$user = "user";
$login_data = login($token, $user);
$connection->send($login_data);
};
$connection->onMessage = function ($connection, $http_buffer) {
echo $http_buffer;
};
$connection->onClose = function ($connection) {
echo "connection closed\n";
};
$connection->onError = function ($connection, $code, $msg) {
echo "Error code:$code msg:$msg\n";
};
$connection->connect();
};
// 運(yùn)行worker
Worker::runAll();
上面單獨(dú)的這個(gè)客戶端代碼我在服務(wù)器上已經(jīng)調(diào)通了
tp的接口我還沒(méi)有寫(xiě),現(xiàn)在就是不知道tp寫(xiě)的api拿到的輸入如何傳入這個(gè)workderman的客戶端程序里面
$connection->onMessage 這個(gè)里面執(zhí)行$data['demo'] = 1233;
call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);這個(gè)試試