简单的油门控制在行驶

如何创建简单的限制控件以停止 API 接收多个请求。还是有效地获得DDOS?因为有时您可能有一个正向 API 将所有连接传递到您的服务。如前所述,还有其他一些解决方案可以将节流构建到实际连接中,但是确实使实际上的简单解决方案变得过于复杂,查看推荐的解决方案,它们几乎通过将id添加到地图来执行下面建议的功能。对于那些仍在学习的人来说,这不是一个糟糕的选择,但是由于go是如此之好,你可以尝试简单,然后在你开始更好地理解机制时改进成更好的解决方案。虽然这被标记为推广某些书籍或其他东西,但这只是我试图帮助他人。如果这是坏事,那么Ill就保持不好。:D


桃花长相依
浏览 76回答 1
1回答

拉丁的传说

下面是一些简单的限制控制代码,将其用作具有所述服务的唯一标识符(在本例中为 IP)和要等待的时间的 IF 调用。正如您通过代码所看到的,您可以将秒更改为分钟或毫秒。你最好使用像cloudflare这样的服务,但作为最后一个选项,把它放在你的API中,并在处理程序代码周围放置一个IF语句,你可以限制对连接的控制。这是为了保持简单,我相信还有其他优雅的解决方案出来,我的愚蠢尝试可能会被嘲笑,但我相信有人会从中吸取教训,如果它们有意义,改进建议也会包括在内。/****************************************************************************** *      _   _               _   _   _               _ _ *     | | | |             | | | | | |        /\   | | | *     | |_| |__  _ __ ___ | |_| |_| | ___   /  \  | | | _____      __ *     | __| '_ \| '__/ _ \| __| __| |/ _ \ / /\ \ | | |/ _ \ \ /\ / / *     | |_| | | | | | (_) | |_| |_| |  __// ____ \| | | (_) \ V  V / *      \__|_| |_|_|  \___/ \__|\__|_|\___/_/    \_\_|_|\___/ \_/\_/ * ---------------------------------------------------------------------------- * This function will temp store the value in a map and then remove it, it will * return true or false if the item is in the map, Now sets delay on second response * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */var throttle = make(map[string]bool)func throttleAllow(ip string, timeout int) (retVal bool) {    if throttle[ip] == true {        fmt.Println("WARM","-=Throttle=-To frequent calls from:",ip)        time.Sleep(time.Duration(timeout)*time.Second) //Random next cycle.        retVal = true  // false will result is receiging to frequent message    } else {        throttle[ip] = true        go func(){            time.Sleep(time.Duration(timeout)*time.Second) //Random next cycle.            delete(throttle, ip)        }()        retVal = true    }    return}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go