我用webman做了一個接口函數(shù),接口函數(shù)會等待ws服務(wù)器的數(shù)據(jù),根據(jù)解析的服務(wù)數(shù)據(jù)在返回數(shù)據(jù),請問接口函數(shù)怎么做等待處理
異步這種直接用webman自定義進程處理簡單些。
新建 process/Api.php
<?php
namespace process;
use Workerman\Protocols\Http\Request;
use Workerman\Connection\AsyncTcpConnection;
class Api
{
public function onMessage($connection, Request $request)
{
$device_id = $request->get('device_id');
$ws = new AsyncTcpConnection('ws://127.0.0.1:2022');
$ws->onMessage = function ($ws, $data) use ($connection) {
$connection->send($data);
$ws->close();
};
$ws->onConnect = function ($ws) use ($device_id) {
$ws->send($device_id);
};
$ws->connect();
}
}
config/process.php中增加配置
return [
// 這里省略了其它配置....
'api' => [
'handler' => \process\Api::class,
'listen' => 'http://0.0.0.0:1234',
]
];
重啟webman后訪問 http://127.0.0.1:1234/?device_id=1
。
可以在接口前增加一層nginx代理,用80或者443統(tǒng)一對外提供服務(wù),方便一些。
你的需求不是在ws響應(yīng)后才返回http響應(yīng)么?響應(yīng)是在ws返回數(shù)據(jù)后響應(yīng)的。你把ws調(diào)用改成你實際的ws調(diào)用。
$ws->onMessage = function ($ws, $data) use ($connection) {
// 這里發(fā)送響應(yīng)
$connection->send($data);
$ws->close();
};
大佬,此例程每次new AsyncTcpConnection('ws://127.0.0.1:2022');接受到數(shù)據(jù)就關(guān)閉,開始沒問題,次數(shù)多了,發(fā)現(xiàn)會很慢,能不能讓new AsyncTcpConnection('ws://127.0.0.1:2022');一直開起,不關(guān)閉。