案例描述:
我要用thinkphp做一個接口,供第三方調(diào)用傳過來數(shù)據(jù),我這邊拿到數(shù)據(jù)后需要通過websocket直接連接通訊服務(wù)器,所以,我只需要workerman作為客戶端使用,不需要作為server端?,F(xiàn)在的問題是thinkphp接口拿到的數(shù)據(jù),如何傳入workerman的客戶端內(nèi)
不勝感激
為啥不是workerman里面調(diào)用thinkphp里面接口數(shù)據(jù)
因為并不知道第三方什么時候調(diào)用api,第三方調(diào)用了api傳了數(shù)據(jù),就需要將數(shù)據(jù)通過websocket傳到websocket server去,整個過程沒有web頁面,只是接口或后臺的處理
那你發(fā)送數(shù)據(jù)到websocket server服務(wù)里面 在服務(wù)里面處理傳過來的值的時候 調(diào)用接口數(shù)據(jù)并處理
我單獨用workerman作為客戶端跑,連接websocket server沒有問題,tp寫接口也可以,現(xiàn)在就是不知道tp接口拿到的數(shù)據(jù)如何傳入workerman客戶端?;蛘叽罄袀冇衅渌膶崿F(xiàn)方式也可以,再次感謝
你是用的gateway嗎?
$data['demo'] = 1233;
call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);
接收的值在onMessage里面的類型里面去處理
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');
// 當連接建立成功時,發(fā)送http請求數(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();
};
// 運行worker
Worker::runAll();
上面單獨的這個客戶端代碼我在服務(wù)器上已經(jīng)調(diào)通了
tp的接口我還沒有寫,現(xiàn)在就是不知道tp寫的api拿到的輸入如何傳入這個workderman的客戶端程序里面
$connection->onMessage 這個里面執(zhí)行$data['demo'] = 1233;
call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);這個試試