Skip to content

为h.Close()增加客户端长连接主动关闭能力 #136

@MacIt

Description

@MacIt

情景:当客户端未主动关闭连接的情况下,若主动停止服务端(Ctrl+C),服务端HTTP Server会被长连接Block,无法正常退出。不便于开发调试。
解决办法:

  1. 在Close()内先检查客户端连接情况,对保持的连接进行关闭,并重置客户端计数。
  2. 同时,增加http server Stop()函数中,Shutdown上下文超时时间,默认3秒,来不及释放长连接,可改成5秒。
h.clients.Range(func(uidKey, cliVal interface{}) bool {
		cli := cliVal.(*UserClient)
		if h.clients.Has(cli.UID) {
			h.clients.Delete(cli.UID)
			close(cli.Send)
			h.zapLogger.Info("[sse] server disconnected", zap.String("uid", cli.UID))
		}
		fmt.Printf("closing clients now %v %v\n", h.OnlineClientsNum(), cli.UID)

		return true
	})

	h.cancel()

	h.asyncTaskPool.Wait()
	h.asyncTaskPool.Stop()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions