<?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();
}
}
异步这种直接用webman自定义进程处理简单些。
新建 process/Api.php
config/process.php中增加配置
重启webman后访问
http://127.0.0.1:1234/?device_id=1
。可以在接口前增加一层nginx代理,用80或者443统一对外提供服务,方便一些。
@walkor 我按照你上面的方法建立好后,调用http://127.0.0.1:1234/?device_id=1没反应。
你的需求不是在ws响应后才返回http响应么?响应是在ws返回数据后响应的。你把ws调用改成你实际的ws调用。
谢谢大佬,我刚才的测试工具没弄对,你写的例子是对的,测试没问题。
大佬,此例程每次new AsyncTcpConnection('ws://127.0.0.1:2022');接受到数据就关闭,开始没问题,次数多了,发现会很慢,能不能让new AsyncTcpConnection('ws://127.0.0.1:2022');一直开起,不关闭。