FISCO-BCOS / go-sdk

golang SDK of FISCO BCOS
Apache License 2.0
72 stars 57 forks source link

channel连接,调用客户端的client.Close()无效 #261

Closed ltmhaha closed 6 months ago

ltmhaha commented 7 months ago

执行完client.Close()后,在命令行查询sudo lsof -i -P -n,进程一直是已连接的状态 TCP 192.168.3.100:51621->192.168.3.184:20200 (ESTABLISHED)

ltmhaha commented 7 months ago

环境:mac go1.18

bxq2011hust commented 7 months ago

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

ltmhaha commented 7 months ago

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

ltmhaha commented 7 months ago

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

bxq2011hust commented 7 months ago

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

有可能是v2的实现里面Close这块实现不完善,要看下Close()的实现里面有没有关闭链接 这个我近期看下,你有空也可以自己看下提个PR哈

ltmhaha commented 7 months ago

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

有可能是v2的实现里面Close这块实现不完善,要看下Close()的实现里面有没有关闭链接 这个我近期看下,你有空也可以自己看下提个PR哈

好的,我近期也仔细看下

bxq2011hust commented 6 months ago

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

请问使用的go-sdk版本是对应FISCO BCOS v3还是v2的?

V2的,我看了sdk源码,只看到了tls握手过程和对应的messages types :clientHandshake = 0x14,并未找到结束连接的挥手过程,不知道是不是我没找到或者理解有误。

有可能是v2的实现里面Close这块实现不完善,要看下Close()的实现里面有没有关闭链接 这个我近期看下,你有空也可以自己看下提个PR哈

好的,我近期也仔细看下

我模拟了下,还是会关闭链接的,方便的话你可以贴一下你的代码,不过下面的代码修改可以优化下

image

ltmhaha commented 6 months ago

我直接在sdk包上写了个main,然后简单调用,发现即便调用了c.Close(),但是控制台查端口 lsof -i -P -n |grep,还是:20200 (ESTABLISHED)状态 20240219164947

ltmhaha commented 6 months ago

另外您贴的那段代码下面,在删除旧链接后,又立刻重新建立了新的tcp链接,在这个case <-hc.closed里,这里我也没太懂

bxq2011hust commented 6 months ago

我直接在sdk包上写了个main,然后简单调用,发现即便调用了c.Close(),但是控制台查端口 lsof -i -P -n |grep,还是:20200

我也是,调用Close之后,写了个sleep,然后看链接,过了一会就关掉了 go语言的链接里面我看有个计数的,并不是立刻关闭

bxq2011hust commented 6 months ago

另外您贴的那段代码下面,在删除旧链接后,又立刻重新建立了新的tcp链接,在这个case <-hc.closed里,这里我也没太懂

https://github.com/FISCO-BCOS/go-sdk/blob/f346c39113bacca738eb704a4e2481c2a9eedc5d/conn/channel.go#L1071-L1093 case <-hc.closed是断开,在case <-hc.reconnection里面才有重连的逻辑

ltmhaha commented 6 months ago

破案了...我在我本地的go pkg里和git clone的项目里都看了,没有case <-hc.reconnection这段代码,然后重新拉了一下发现分支早就有更新了,我看sdk页面右边的release是v1.0.0以为没更新呢...实际把我本地更新到v1.1.0就好了,可以正常关闭。 另外你昨天说的case <-hc.closed这里确实要优化下,不然关闭会报空指针,是你更新一下还是我提个pr? 抱歉耽误您这么多时间。

bxq2011hust commented 6 months ago

破案了...我在我本地的go pkg里和git clone的项目里都看了,没有case <-hc.reconnection这段代码,然后重新拉了一下发现分支早就有更新了,我看sdk页面右边的release是v1.0.0以为没更新呢...实际把我本地更新到v1.1.0就好了,可以正常关闭。 另外你昨天说的case <-hc.closed这里确实要优化下,不然关闭会报空指针,是你更新一下还是我提个pr? 抱歉耽误您这么多时间。

客气了,问题解决就好,方便的话请提个修复的PR到master-FISCO-BCOS-v2 @ltmhaha

flowerrun commented 6 months ago

嗨,@ltmhaha您好呀! 首次参与PR且合入,小助手可安排邮寄一件周边礼品,欢迎联系微信(FISCOBCOS010)