hesh915 / go-socket.io-client

socket.io client for golang
BSD 3-Clause "New" or "Revised" License
97 stars 68 forks source link

一些给后来的人的建议 #15

Open mofadeyunduo opened 4 years ago

mofadeyunduo commented 4 years ago
mofadeyunduo commented 4 years ago
func (c *clientConn) pingLoop() {
    lastPing := time.Now()
    lastTry := lastPing
    for {
        now := time.Now()
        pingDiff := now.Sub(lastPing)
        tryDiff := now.Sub(lastTry)
        select {
        case ok := <-c.pingChan:
            if !ok {
                return
            }
            fmt.Println("ping chan receive data")
            lastPing = time.Now()
            lastTry = lastPing
        case <-time.After(c.pingInterval - tryDiff):
            fmt.Println("ping again")
            c.writerLocker.Lock()
            if w, _ := c.getCurrent().NextWriter(message.MessageText, parser.PING); w != nil {
                writer := newConnWriter(w, &c.writerLocker)
                writer.Close()
            } else {
                c.writerLocker.Unlock()
            }
            lastTry = time.Now()
        }
        case <-time.After(c.pingTimeout - pingDiff):
            c.Close()
            return
        }
    }
}

Socket.IO 默认 pingInterval 为 25s,pingTimeout 5s,如果 pingInterval > pingTimeout 会导致强制销毁 Socket.IO 链接,我觉得这个是有问题的

mofadeyunduo commented 4 years ago

我改了下他上面的问题,并且魔改了一些东西,Socket.IO 2.x 也可以使用,可以参考 go-socket.io-client,有问题提 Issue

hlbbt commented 1 year ago

我改了下他上面的问题,并且魔改了一些东西,Socket.IO 2.x 也可以使用,可以参考 go-socket.io-client,有问题提 Issue

请问基于https地址的socket是否支持,我自己测试是不支持的。

image

显示超时,我使用nodejs是可以实现的,基于socket.io 1.7.4版本