国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

thinkphp如何調(diào)用workman傳值

dpdzq

案例描述:

我要用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)

不勝感激

4777 3 0
3個(gè)回答

不敗少龍

為啥不是workerman里面調(diào)用thinkphp里面接口數(shù)據(jù)

  • dpdzq 2021-05-28

    因?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)的處理

  • 不敗少龍 2021-05-28

    那你發(fā)送數(shù)據(jù)到websocket server服務(wù)里面 在服務(wù)里面處理傳過(guò)來(lái)的值的時(shí)候 調(diào)用接口數(shù)據(jù)并處理

  • 不敗少龍 2021-05-28

    onMessage里面去做處理第三方的接口

  • dpdzq 2021-05-28

    第三方只能調(diào)用restful接口,但是websocket server只提供websocket,無(wú)法提供其他協(xié)議的接口

  • dpdzq 2021-05-28

    @8039:所以我必須在中間再架一層,提供restful接口給第三方用,拿到數(shù)據(jù)通過(guò)websocket傳給websocket server

  • dpdzq 2021-05-28

    我單獨(dú)用workerman作為客戶端跑,連接websocket server沒(méi)有問(wèn)題,tp寫(xiě)接口也可以,現(xiàn)在就是不知道tp接口拿到的數(shù)據(jù)如何傳入workerman客戶端。或者大佬們有其他的實(shí)現(xiàn)方式也可以,再次感謝

  • 不敗少龍 2021-05-28

    那很前端獲取到接口數(shù)據(jù)直接send給websocket server

  • 不敗少龍 2021-05-28

    不過(guò)你可以貼一下代碼 按照我的理解是剛剛說(shuō)的那樣去做

  • dpdzq 2021-05-28

    @4519:直接send給websocket server倒是可以,但這樣就不是長(zhǎng)連接了,用一次連一次的話,太頻繁了

  • 不敗少龍 2021-05-28

    你是用的gateway嗎?
    $data['demo'] = 1233;
    call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);
    接收的值在onMessage里面的類(lèi)型里面去處理

  • 不敗少龍 2021-05-28

    是用一個(gè)程序框架里面的時(shí)候

  • dpdzq 2021-05-28

    沒(méi)有用到gateway,查了下,網(wǎng)上都說(shuō)的是gateway做server,gatewayclient與gateway通訊,好像也不太符合

dpdzq

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的客戶端程序里面

  • 不敗少龍 2021-05-28

    $connection->onMessage 這個(gè)里面執(zhí)行$data['demo'] = 1233;
    call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);這個(gè)試試

  • 不敗少龍 2021-05-28

    不在一個(gè)框架內(nèi)只能甩curl去處理

  • 不敗少龍 2021-05-28

    你是按照這個(gè)寫(xiě)的嗎? http://doc.workerman.net/faq/async-task.html

  • dpdzq 2021-05-28

    沒(méi)太理解,這個(gè)call_user_func調(diào)用的是api?

  • dpdzq 2021-05-28

    demo中的sendmail是哪里的?也是workerman里面的嗎?

dpdzq

網(wǎng)上說(shuō)的都是在server的worker里面再創(chuàng)建一個(gè)worker,text協(xié)議,但是這個(gè)是在websocket的server里面,現(xiàn)在我的worker是個(gè)client

  • dpdzq 2021-06-29

    這個(gè)問(wèn)題已經(jīng)搞定,確實(shí)也可以在這個(gè)作為客戶端的worker里面再創(chuàng)建一個(gè)text worker監(jiān)聽(tīng)api傳過(guò)來(lái)的數(shù)據(jù)

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??