use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
$task = new \Workerman\Worker();
$task->onWorkerStart = function ($task) {
// 不支持直接指定http,但是可以用tcp模拟http协议发送数据
$connection = new \Workerman\Connection\AsyncTcpConnection('ws://xxx.xxx.xxx.xxx:1234');
为啥不是workerman里面调用thinkphp里面接口数据
因为并不知道第三方什么时候调用api,第三方调用了api传了数据,就需要将数据通过websocket传到websocket server去,整个过程没有web页面,只是接口或后台的处理
那你发送数据到websocket server服务里面 在服务里面处理传过来的值的时候 调用接口数据并处理
onMessage里面去做处理第三方的接口
第三方只能调用restful接口,但是websocket server只提供websocket,无法提供其他协议的接口
@8039:所以我必须在中间再架一层,提供restful接口给第三方用,拿到数据通过websocket传给websocket server
我单独用workerman作为客户端跑,连接websocket server没有问题,tp写接口也可以,现在就是不知道tp接口拿到的数据如何传入workerman客户端。或者大佬们有其他的实现方式也可以,再次感谢
那很前端获取到接口数据直接send给websocket server
不过你可以贴一下代码 按照我的理解是刚刚说的那样去做
@4519:直接send给websocket server倒是可以,但这样就不是长连接了,用一次连一次的话,太频繁了
你是用的gateway吗?
$data['demo'] = 1233;
call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);
接收的值在onMessage里面的类型里面去处理
是用一个程序框架里面的时候
没有用到gateway,查了下,网上都说的是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协议发送数据
$connection = new \Workerman\Connection\AsyncTcpConnection('ws://xxx.xxx.xxx.xxx:1234');
};
// 运行worker
Worker::runAll();
上面单独的这个客户端代码我在服务器上已经调通了
tp的接口我还没有写,现在就是不知道tp写的api拿到的输入如何传入这个workderman的客户端程序里面
$connection->onMessage 这个里面执行$data['demo'] = 1233;
call_user_func([\app\service\common\EventServer\EventServer::class,'demo'],$data);这个试试
不在一个框架内只能甩curl去处理
你是按照这个写的吗? http://doc.workerman.net/faq/async-task.html
没太理解,这个call_user_func调用的是api?
demo中的sendmail是哪里的?也是workerman里面的吗?
网上说的都是在server的worker里面再创建一个worker,text协议,但是这个是在websocket的server里面,现在我的worker是个client
这个问题已经搞定,确实也可以在这个作为客户端的worker里面再创建一个text worker监听api传过来的数据