在cmd下执行 php test.php,可以正常收发数据。 但指令是由用户发送,所以要用PHP写个接口获取用户的指令,然后运行workerman返回指令对应的数据。 想请教下接口获取用户发来的指令后,怎么运行workerman?
workerman是命令行启动的,不能通过网页启动。
你可以监听一个http协议的端口,$this->worker->onMessage 里接收到客户端http请求后new AsncTcpConnection去请求远程数据。然后命令行启动这个http服务。
监听一个http协议的端口,是先new一个woker,然后在这个worker的onMessage 中再new AsncTcpConnection,这个我之前试过了,报错说window下不支持同时实例化多个worker,是这样吗?
你__construct源码里
$this->worker = new Worker(); 改成 $this->worker = new Worker('http://0.0.0.0:8585'); $this->worker->onMessage = array($this, 'onMessage');
然后给Bases写一个onMessage方法。
是这个意思吗,onMessage里面写什么内容,跟start方法怎么关联?
public function __construct($url,$base,$orderArr = []){ $this -> url = $url; $this -> base = $base; $this -> orderArr = $orderArr; $this->worker = new Worker('http://0.0.0.0:8585'); $this->worker->onMessage = array($this, 'onMessage'); $this -> worker -> name = 'normal'; $this -> start(); } public function onMessage(){ //这里面写什么内容? } public function start(){ $this -> worker -> onWorkerStart = function(){ $con = new AsyncTcpConnection($this -> url); //其他代码 } }
onMessage的内容就是start的内容。start方法可以去掉了
onMessage 不需要参数吧,我现在直接实例化传参,然后命令行运行test.php,一点反应都没有。
onMessage用法去看手册吧。。。
突然又感觉懵了,我是这样理解的,您给看看理解得对不对。 要想实现我说的功能,就得在onMessage里面使用AsyncTcpConnection才行。 但onMessage的作用是当Workerman收到数据时才触发。 所以是不是需要再写一个onConnect,用来接收用户发送的指令发给服务器。 这样在AsyncTcpConnection的onConnect中就不需要发送指令到服务器,只需在onMessage里面获取服务器返回的数据,然后进行数据库操作就行了。 是这个意思吗?
或者说不需要再写onConnect,还是在AsyncTcpConnection的onConnect中向服务器发指令,在onMessage中获取返回的数据?
如果不需要再写onConnect,还是在AsyncTcpConnection的onConnect中向服务器发指令,在onMessage中获取返回的数据,这样写对吗?
public function __construct($url,$base,$orderArr = []){ $this -> url = $url; $this -> base = $base; $this -> orderArr = $orderArr; $this -> worker = new Worker('http://0.0.0.0:8585'); $this -> worker -> onMessage = array($this,'onMessage'); $this -> worker -> name = 'normal'; $this-> onMessage(); //是这样触发onMessage方法? } public function onMessage(){ $this -> worker -> onMessage = function(){ //是onMessage还是onWorkerStart $con = new AsyncTcpConnection($this -> url); $con -> onConnect = function($con){ //拼接、发送指令 }; $con -> onMessage = function($con,$returnDatas){ //获取服务器返回的数据,进行数据库操作 }; }; Worker ::runAll(); }
我按照上面的方法试了,还是和之前接口返回的一样,请求超时,是哪没理解写错了吗,我总感觉快写出来了,麻烦您再指点一下吧。
workerman是命令行启动的,不能通过网页启动。
你可以监听一个http协议的端口,$this->worker->onMessage 里接收到客户端http请求后new AsncTcpConnection去请求远程数据。然后命令行启动这个http服务。
监听一个http协议的端口,是先new一个woker,然后在这个worker的onMessage 中再new AsncTcpConnection,这个我之前试过了,报错说window下不支持同时实例化多个worker,是这样吗?
你__construct源码里
$this->worker = new Worker();
改成
$this->worker = new Worker('http://0.0.0.0:8585');
$this->worker->onMessage = array($this, 'onMessage');
然后给Bases写一个onMessage方法。
是这个意思吗,onMessage里面写什么内容,跟start方法怎么关联?
onMessage的内容就是start的内容。start方法可以去掉了
onMessage 不需要参数吧,我现在直接实例化传参,然后命令行运行test.php,一点反应都没有。
onMessage用法去看手册吧。。。
突然又感觉懵了,我是这样理解的,您给看看理解得对不对。
要想实现我说的功能,就得在onMessage里面使用AsyncTcpConnection才行。
但onMessage的作用是当Workerman收到数据时才触发。
所以是不是需要再写一个onConnect,用来接收用户发送的指令发给服务器。
这样在AsyncTcpConnection的onConnect中就不需要发送指令到服务器,只需在onMessage里面获取服务器返回的数据,然后进行数据库操作就行了。
是这个意思吗?
或者说不需要再写onConnect,还是在AsyncTcpConnection的onConnect中向服务器发指令,在onMessage中获取返回的数据?
如果不需要再写onConnect,还是在AsyncTcpConnection的onConnect中向服务器发指令,在onMessage中获取返回的数据,这样写对吗?
我按照上面的方法试了,还是和之前接口返回的一样,请求超时,是哪没理解写错了吗,我总感觉快写出来了,麻烦您再指点一下吧。