gateway中的http和json两个协议共用的问题

bijingjieshen

现在项目需要用到两个协议,一个是http,一个是自定义的json,因此有两个gateway,一个负责监听http,一个负责监听json,而我的需求是,当http有发送数据时,将这个数据转为json,然后转发到连接json gateway的客户端,但现在发现http发过来的数据会调用http的gateway,转发给json客户端时发送时client_id显示为空,我感觉是这个client_id是保存在json的gateway那里的,所以http的gateway不能获取到,请问怎么让http的gateway监听到数据时能够转发到json上的客户端连接??

3562 5 0
5个回答

walkor

gateway不用监听http端口。

网页将数据post任意mvc框架(tp yii等),mvc框架里里用gatewayClient将要推送的数据推给客户端。
参见手册 http://www.workerman.net/gatewaydoc/advanced/push.html

  • 暂无评论
bijingjieshen

我这边是这样一个情况,后台采用gatewayworker,创建一个http服务一个json服务,如下所示

$ sudo php start.php start
Workerman start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.3.9          PHP version:5.3.3
------------------------ WORKERS -------------------------------
user          worker                 listen                     processes status
root          YourAppBusinessWorker  none                        4          
root          AppGateway             http://192.168.1.145:8484   4          
root          Register               text://192.168.1.145:1237   1          
root          YourAppBusinessWorker  none                        4          
root          YourAppGateway         json://192.168.1.145:8282   4          
root          Register               text://192.168.1.145:1238   1          

http负责获取手机app的请求,然后要把请求发给json那边。我知道json客户端client_id,但是在http的onMessage函数中却没法发出去?

  • 暂无评论
bijingjieshen

app请求http,http处理完之后发给指定的车载端(以json格式协议),通过Gateway::sendToClient('c0a801910fa100000001', "ok");(c0a801910fa100000001为车载端client_id),但是车载端收不到发送的数据。在同一个协议下可以发送给任何连接上的客户端,但是在两个协议没法发送了,怎么办呢?

  • 暂无评论
walkor

按照手册多协议部分 配置正确的话是没问题,对照手册检查下看看是不是哪里弄错了。
还有client_id是不是弄错了,可以用Gateway::sendToAll('xxx');发下试试

  • 暂无评论
bijingjieshen

已经解决了,如下所示,把http和json放在了一个服务里面,而不是起两个实例。然后在Events.php的onMessage函数中通过 if($_SERVER == 8484),写http逻辑;if($_SERVER == 8282) 写json逻辑。

$ sudo php start.php start
Workerman start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.3.9          PHP version:5.3.3
------------------------ WORKERS -------------------------------
user          worker                 listen                     processes status
root          YourAppBusinessWorker  none                        4          
root          YourAppGateway         json://192.168.1.145:8282   4          
root          HttpGateway            http://192.168.1.145:8484   4          
root          Register               text://192.168.1.145:1238   1          
----------------------------------------------------------------
Press Ctrl-C to quit. Start success.
  • banice 2017-04-14

    Events中的http端口onMessage里,可以使用$_POST这些函数吗?我用这些函数全部收不到值。

年代过于久远,无法发表回答
🔝