为了账号安全,请及时绑定邮箱和手机立即绑定

简单的油门控制在行驶

简单的油门控制在行驶

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

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

下面是一些简单的限制控制代码,将其用作具有所述服务的唯一标识符(在本例中为 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

}


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信