lxzan / gws

simple, fast, reliable websocket server & client, supports running over tcp/kcp/unix domain socket. keywords: ws, proxy, chat, go, golang...
https://pkg.go.dev/github.com/lxzan/gws
Apache License 2.0
1.36k stars 87 forks source link

主动关闭事件? #10

Closed cjf621 closed 1 year ago

cjf621 commented 1 year ago

好像没有主动关闭事件,我在 error里,调用了net.conn.close,看代码这个是没必要的,那error事件怎么调用关闭呢

lxzan commented 1 year ago

WriteClose就是主动关闭,net.Conn的关闭封装在gws内部了,你看下ReadLoop的源码

lxzan commented 1 year ago

一但出现error,gws就会关闭连接并调用OnError

cjf621 commented 1 year ago

一但出现error,gws就会关闭连接并调用OnError

因为我之前用的github.com/gorilla/websocket这个,然后有问题是错误1006,EOF,这个我看读取帧的时候就有1006,但是不会触发emitClose,会触发emitError 这个EOF事件

lxzan commented 1 year ago

gws里面收到对方发送的关闭帧才会触发emitClose/OnClose,IO和其他错误是触发emitError/OnError,你可以看一下Event的注释

lxzan commented 1 year ago

gws 在连接生命周期管理方面可以说是自动挡了, 所有行为都符合 WebSocket 协议标准: https://lxzan.github.io/gws/reports/servers/

cjf621 commented 1 year ago

gws 在连接生命周期管理方面可以说是自动挡了, 所有行为都符合 WebSocket 协议标准: https://lxzan.github.io/gws/reports/servers/

0: 0 [1: 48] @ 0x5ef51e 0x6580a1 0x65ddb4 0x65eb55 0x6715dc 0x683c3b 0x681b61 0x6814f1 0x67fc98 0x67def6 0x6aca45 0x6aca46 0x9c9218 0x9c91d1 0x9d2252 0x9d5e9b 0x747aea 0x748032 0x747cf5 0x46d781

0x5ef51d vendor/golang.org/x/crypto/cryptobyte.(*String).ReadASN1ObjectIdentifier+0x7d C:/Users/admin/sdk/go1.20.1/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go:453

0x6580a0 crypto/x509.parseAI+0x40 C:/Users/admin/sdk/go1.20.1/src/crypto/x509/parser.go:153

0x65ddb3 crypto/x509.parseCertificate+0x803 C:/Users/admin/sdk/go1.20.1/src/crypto/x509/parser.go:913

0x65eb54 crypto/x509.ParseCertificate+0x34 C:/Users/admin/sdk/go1.20.1/src/crypto/x509/parser.go:985

0x6715db crypto/tls.(*certCache).newCert+0xcb C:/Users/admin/sdk/go1.20.1/src/crypto/tls/cache.go:85

0x683c3a crypto/tls.(*Conn).verifyServerCertificate+0xca C:/Users/admin/sdk/go1.20.1/src/crypto/tls/handshake_client.go:866

0x681b60 crypto/tls.(*clientHandshakeState).doFullHandshake+0x2c0 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/handshake_client.go:530

0x6814f0 crypto/tls.(*clientHandshakeState).handshake+0x3c0 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/handshake_client.go:450

0x67fc97 crypto/tls.(*Conn).clientHandshake+0x5f7 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/handshake_client.go:239

0x67def5 crypto/tls.(*Conn).handshakeContext+0x355 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/conn.go:1491

0x6aca44 crypto/tls.(*Conn).HandshakeContext+0x3c4 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/conn.go:1434

0x6aca45 crypto/tls.dial+0x3c5 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/tls.go:157

0x9c9217 crypto/tls.DialWithDialer+0x2f7 C:/Users/admin/sdk/go1.20.1/src/crypto/tls/tls.go:117

0x9c91d0 github.com/lxzan/gws.NewClient+0x2b0 C:/Users/admin/go/pkg/mod/github.com/lxzan/gws@v1.4.6/client.go:55

0x9d2251 mlwebsocket/internal/ws_client.(*Wsinfo).Login_101+0x3c1 d:/go/mlwebsocket/internal/ws_client/client.go:188

0x9d5e9a mlwebsocket/internal/work.subwork.func1+0x8a d:/go/mlwebsocket/internal/work/work.go:114

0x747ae9 github.com/lxzan/concurrency.FuncJob.Do+0x19 C:/Users/admin/go/pkg/mod/github.com/lxzan/concurrency@v1.2.0/job.go:19

0x748031 github.com/lxzan/concurrency.(*WorkerQueue).call+0x61 C:/Users/admin/go/pkg/mod/github.com/lxzan/concurrency@v1.2.0/worker_queue.go:91

0x747cf4 github.com/lxzan/concurrency.(*WorkerQueue).do+0x34 C:/Users/admin/go/pkg/mod/github.com/lxzan/concurrency@v1.2.0/worker_queue.go:58 奇怪的 heap

cjf621 commented 1 year ago

gws里面收到对方发送的关闭帧才会触发emitClose/OnClose,IO和其他错误是触发emitError/OnError,你可以看一下Event的注释

我再研究下吧,我现在的问题是,两个client发生抢占,原client会出现error,同时heap会溢出

lxzan commented 1 year ago

这些信息不像是OnRecovery打印出来的, 你说的heap指的是stack overflow ?

lxzan commented 1 year ago

这里数组越界了? C:/Users/admin/sdk/go1.20.1/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go:453

cjf621 commented 1 year ago

这些信息不像是OnRecovery打印出来的, 你说的heap指的是stack overflow ?

是pprof的heap,内存泄露

cjf621 commented 1 year ago

大佬有交流群嘛?咨询一下嘿嘿

lxzan commented 1 year ago

大佬有交流群嘛?咨询一下嘿嘿

加这个QQ群:819527884

lxzan commented 1 year ago

关了issue吧, 你这贴堆栈信息闹乌龙呢

cjf621 commented 1 year ago