client中的close
client中的close方法是个空方法,请问这个有什么作用
对于 http 客户端没有用,对于 tcp 客户端它不是空方法。
小马哥你好,我的调用过程是这样的 A B C 1.client ----->server 2. client-----> server A调用B,同时B会从C获取一些数据,然后返回到A.
开发过程中发现B的server会产生一直不释放的状态为CLOSE_WAIT的进程,像是B的server没有正确关闭连接,这里有主动关闭连接的方式吗?两个server都是swoole的,启动参数也加了心跳,还是会有以上情况。最终会导致该连接无法再次连接,只能重新启动server
A B C
1.client----->server
2.client-----> server
如果你用的 server 是 swoole 的,那你在 B 中使用的 http 客户端也用 swoole 版本的,而且一个全局的就可以了,不需要每次调用创建新的,swoole 版本的 http 客户端中自带连接池。
是tcp的。我在B中的client是用的Socket/Client,尝试了下Swoole/Client,会抛出错误
{"type":1,"message":"swoole_async_set(): eventLoop has already been created. unable to create swoole_server.","file":"vendor/hprose/hprose-swoole/src/Hprose/Swoole/Socket/Client.php","line":44}
swoole文档 https://wiki.swoole.com/wiki/page/780.html 这表示你的程序在new swoole_server之前使用了其他异步IO的API,底层已经创建了EventLoop,无法重复创建。 这是错误的用法,如果要在Server中使用异步的Client、MySQL、Redis,请在Server的onWorkerStart回调函数或其他发生在Worker进程内的回调函数中使用。
我注释掉这个该处代码后可以继续执行,但是在调用C中Server注册的方法时,并没有像Socket/Client一样返回Array数据,而是返回了Hprose\Future Object
tcp 客户端。swoole 版本的只有异步调用,你可以用 Hprose\Future\co 和 yield 来实现同步的写法。