RT,我用Gatewayworker 实现了几个接口,都是服务端。
我有一个接口是作为socket客户端,我试了用workerman,用AsyncTcpConnection,可以连接对方服务器,但我想把AsyncTcpConnection集成到原来的几个接口一起,代码怎么写,各位前辈给指导一下,集成的方法,最好是详细一点的,我之前没写过代码,接触PHP和workerman才两个星期不到。谢谢各位。
有类似的Demo代码,辛苦各位贴出来,给我学习一下。
1、既然是刚接触,建议老老实实看手册,使用workerman进行业务开发需要一定的功底,否则很容易自己给自己埋很多不是坑的坑; 2、至于使用 workerman 或者 gatewayworker 作为客户端,手册上就说的很详细了,DEMO代码也有,怎么整合到自己的上下文也不是什么难事,难的还是你没认真看手册: http://doc.workerman.net/faq/as-wss-client.html
每天都在看手册,没写过代码,所以不是很懂,但是我想把AsyncTcpConnection 发出的连接也当作一个client用,这样发消在Events中调用,通迅就比较方便。
我定议了一个协议 Xml 用的AsyncTcpConnection
新建一个Gateway,运行就报错 这个是gateway
$internal_gateway = new Gateway("Xml://192.168.3.8:7273"); $internal_gateway->name='sis_client'; // #### 不要与原来start_gateway.php的一样#### // #### 比原来跨度大一些,比如在原有startPort基础上+1000 #### $internal_gateway->startPort = 4300; // #### 这里设置成与原start_gateway.php 一样 #### $internal_gateway->registerAddress = '127.0.0.1:1238';
这个是定义的协议,
public static function input($recv_buffer,AsyncTcpConnection $connection ) { if(strlen($recv_buffer) < 1) { // 不够10字节,返回0继续等待数据 return 0; } // 返回包长,包长包含 头部数据长度+包体长度 $total_len = base_convert(substr($recv_buffer, 0, 10), 10, 10); return $total_len; } public static function decode($recv_buffer) { // 请求包体 $body = $recv_buffer; return simplexml_load_string($body); } public static function encode($xml_string) { // 包体+包头的长度 //$total_length = strlen($xml_string)+10; // 长度部分凑足10字节,位数不够补0 //$total_length_str = str_pad($total_length, 10, '0', STR_PAD_LEFT); // 返回数据 //return $total_length_str . $xml_string; return $xml_string; } }
stream_socket_server(): unable to connect to tcp://192.168.3.8:7273 (Cannot assign requested address) in file /var/www/html/GatewayWorker/vendor/workerman/workerman/Worker.php on line 2206 Fatal error: Uncaught exception 'Exception' with message 'Cannot assign requested address' in /var/www/html/GatewayWorker/vendor/workerman/workerman/Worker.php on line 2208 Exception: Cannot assign requested address in /var/www/html/GatewayWorker/vendor/workerman/workerman/Worker.php on line 2208 Call Stack: 0.0002 231320 1. {main}() /var/www/html/GatewayWorker/start.php:0 0.0114 1362368 2. Workerman\Worker::runAll() /var/www/html/GatewayWorker/start.php:37 0.0137 1398216 3. Workerman\Worker::initWorkers() /var/www/html/GatewayWorker/vendor/workerman/workerman/Worker.php:504 0.0143 1404712 4. Workerman\Worker->listen() /var/www/html/GatewayWorker/vendor/workerman/workerman/Worker.php:646
这个报错的意思是指监听的IP并不是当前服务器的IP所致
因为是要连接远程的服务器,所以是发起连接而不是监听本地IP端口。但我不知道怎么修改协议能让它支持主动发起远程连接。
1、没有让你监听端口,是你的代码报错显示程序有在监听端口的行为,为什么监听了,你得查自己的代码; 2、AsyncTcpConnection原本就是一个基于workerman的客户端类库;
那请问一下,我怎么样让 AsyncTcpConnection 通讯的数据在GatewayWorker中的Events中用onMessage来处理?
应该是建立Gateway 不支持这样连接远程,但我不明白怎么样才能连接远程地址,让Gateway 作为一个客户端。
Fatal error: Uncaught exception 'Exception' with message 'class \Protocols\Async TcpConnection not exist' in /var/www/html/GatewayWorker/vendor/workerman/workerm an/Worker.php on line 2272 Exception: class \Protocols\AsyncTcpConnection not exist in /var/www/html/Gatewa yWorker/vendor/workerman/workerman/Worker.php on line 2272 Call Stack: 0.0002 231320 1. {main}() /var/www/html/GatewayWorker/start.php:0 0.0201 1346776 2. require_once('/var/www/html/GatewayWorker/Application s/YourApp/start_xml_gateway.php') /var/www/html/GatewayWorker/start.php:34 0.0201 1347464 3. GatewayWorker\Gateway->__construct() /var/www/html/Ga tewayWorker/Applications/YourApp/start_xml_gateway.php:10 0.0201 1347600 4. Workerman\Worker->__construct() /var/www/html/Gateway Worker/vendor/workerman/gateway-worker/src/Gateway.php:239 0.0201 1358672 5. Workerman\Worker->parseSocketAddress() /var/www/html/ GatewayWorker/vendor/workerman/workerman/Worker.php:2169
有类似的Demo代码,辛苦各位贴出来,给我学习一下。
1、既然是刚接触,建议老老实实看手册,使用workerman进行业务开发需要一定的功底,否则很容易自己给自己埋很多不是坑的坑;
2、至于使用 workerman 或者 gatewayworker 作为客户端,手册上就说的很详细了,DEMO代码也有,怎么整合到自己的上下文也不是什么难事,难的还是你没认真看手册:
http://doc.workerman.net/faq/as-wss-client.html
每天都在看手册,没写过代码,所以不是很懂,但是我想把AsyncTcpConnection 发出的连接也当作一个client用,这样发消在Events中调用,通迅就比较方便。
我定议了一个协议 Xml
用的AsyncTcpConnection
新建一个Gateway,运行就报错
这个是gateway
这个是定义的协议,
这个报错的意思是指监听的IP并不是当前服务器的IP所致
因为是要连接远程的服务器,所以是发起连接而不是监听本地IP端口。但我不知道怎么修改协议能让它支持主动发起远程连接。
1、没有让你监听端口,是你的代码报错显示程序有在监听端口的行为,为什么监听了,你得查自己的代码;
2、AsyncTcpConnection原本就是一个基于workerman的客户端类库;
那请问一下,我怎么样让 AsyncTcpConnection 通讯的数据在GatewayWorker中的Events中用onMessage来处理?
应该是建立Gateway 不支持这样连接远程,但我不明白怎么样才能连接远程地址,让Gateway 作为一个客户端。