gpt4 book ai didi

sockets - 限制连接到网络服务的客户端数量

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:01 25 4
gpt4 key购买 nike

如何限制连接到我的服务的客户端数量?我尝试了一个简单的计数器,但是如果客户端没有关闭就退出了他们的联系我不知道怎么弄的。

请有人给我一些想法以便得到它吗?

const MAX_CLIENTS = 5
var ConnectedClients int
func main() {
ConnectedClients = 0
server, err := net.Listen(CONN_TYPE, net.JoinHostPort(CONN_HOST, CONN_PORT))
if err != nil {
fmt.Println("Error Listening", err.Error())
os.Exit(1)
}
defer server.Close()
fmt.Println("Listening on ", net.JoinHostPort(CONN_HOST, CONN_PORT))
for {
conn, err := server.Accept()
if err != nil {
fmt.Println("Error acepting: ", err.Error())
os.Exit(1)
}

ConnectedClients += 1
fmt.Println("Connected with:", conn.RemoteAddr())
fmt.Println("Clients:", ConnectedClients)

if ConnectedClients > MAX_CLIENTS {
fmt.Println("Limit reached! Disconnecting:", conn.RemoteAddr())
conn.Close()
}
go handleRequest(conn)
}
}

func handleRequest(conn net.Conn) {
//This defer will never run.... :-(
defer func() {
fmt.Println("Connection closed with client:", conn.RemoteAddr())
ConnectedClients -= 1
conn.Close()
}()
...
...
}

最佳答案

实际上这可能是您没有与我们共享的代码中的问题(那些...)

连接将退出 - 迟早。假设在您的连接处理程序中您必须执行一些读/写操作,因此最好的方法是使用读/写超时(截止日期)来引发您将根据需要处理的错误。

请检查文档中SetReadDeadline/SetWriteDeadline 的使用 http://golang.org/pkg/net/#IPConn.SetReadDeadline或本答案中使用的 - https://stackoverflow.com/a/12741495/93767

修复处理程序部分后,您可以毫无问题地使用客户端计数。

关于sockets - 限制连接到网络服务的客户端数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com