GatewayClient 使用Gateway::$registerAddress这个时候已经保持链接了吗?

pjp

例如一个脚本,在while (true) 之前使用了Gateway::$registerAddress,然后在循环中使用方法例如Gateway::isUidOnline,会不会因为脚本一直运行太久,导致断开链接?还是说有自动重连机制?

2899 1 0
1个回答

phpcreeper

1、执行到GatewayClient::isUidOnline()时才会建立TCP连接,而且这个连接是短连接,所以在while循环中调用的isUidOnline话,执行完毕之后会自动断开并重建TCP连接;
2、据我说知,GatewayClient提供的所有的读操作API都是短连接模式,但是对于写操作的API则是支持长连接的,注意默认也是短连接,可以这样开启:GatewayClient::$persistentConnection = true

  • pjp 2020-06-11

    谢谢 我还想问下,开启长连接之后超时时间是多久,发现超时会自动重连机制吗?

  • phpcreeper 2020-06-11

    你这个地方说的超时我认为有些含糊,这么说吧:
    1、超时并不等于TCP连接一定就断开,因为这里的超时指的是数据传输超时,所以并不一定有自从重连这回事。
    2、数据传输超时可能会导致TCP连接断开,一般这个超时时间为60秒,60秒内如果没有数据通信,可能会被路由节点干掉,注意是可能并不是一定,你也可能绕开这些路由节点,从这一意义上看,一般我们为了保持长连接持续性,要加心跳完事儿;即便如此,服务端也可能自行对数据传输进行设置判断,比如100秒内没有任何数据往来,那我服务端就干掉你,当然你也可能压根就没设定这种超时逻辑,取决于你的设定了。

  • phpcreeper 2020-06-11

    3、对于GatewayClient发起的长连接,当然如果因其他原因被断开也不会自动重连,再次发起请求时会重新建立一个新的TCP连接。

  • pjp 2020-06-11

    @614:我的超时意思是:类似比如mysql如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。 所以我想问下GatewayClient使用persistentConnection建立长链接,如果长时间没有操作使用,会断开吗,timeout值又是多少呢?

  • phpcreeper 2020-06-11

    上面已经跟你说的很清楚了, 自己多捋几遍吧;再者mysql服务器是有其自己的内部默认设定,各种层面的超时时间是多少以及对超时以后服务端执行了什么动作,mysql手册都有官方说明【另外你举例的这个timeout也很粗暴,什么超时呢? 连接超时?数据超时?其他超时?】;不管怎么样,你用的是gatewayworker服务器,不一样的哈,单就数据超时而言,gatewaywroker本身并没有做这个限制,完全由你说了算。

  • phpcreeper 2020-06-11

    另外建议你多看看gatewayworker手册部分的心跳一节,应该会对你有很大启发和帮助。

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