Sockets 限制连接到网络服务的客户端数量
如何限制连接到我的服务的客户端数量? 我试着用一个简单的计数器,但是如果一个客户端没有关闭就退出了 他们的关系我不知道怎么搞的 有人能给我一些想法吗Sockets 限制连接到网络服务的客户端数量,sockets,go,Sockets,Go,如何限制连接到我的服务的客户端数量? 我试着用一个简单的计数器,但是如果一个客户端没有关闭就退出了 他们的关系我不知道怎么搞的 有人能给我一些想法吗 const MAX_CLIENTS = 5 var ConnectedClients int func main() { ConnectedClients = 0 server, err := net.Listen(CONN_TYPE, net.JoinHostPort(CONN_HOST, CONN_PORT)) if e
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的用法- 一旦修复了处理程序部分,就可以使用客户端计数而不会出现任何问题