首页 > 后端开发 > Golang > 为什么我的 Web 服务器似乎被调用了偶数次?

为什么我的 Web 服务器似乎被调用了偶数次?

Susan Sarandon
发布: 2024-12-30 12:54:10
原创
924 人浏览过

Why Does My Web Server Seem to Be Called an Even Number of Times?

为什么 Web 服务器被调用偶数次?

在 Web 编程中,服务器响应传入的请求。然而,我们的简单网络服务器被看似随机偶数次调用。

底层请求

刷新页面后,您可能会观察到以下内容:

You've called me 1 times
You've called me 3 times
You've called me 5 times
....
登录后复制

发生这种情况是因为浏览器在后台发出额外的请求。一个常见的请求是 favicon.ico,一个通常显示在网页标题旁边的图标。

Web 服务器响应

我们的 Web 服务器不处理 favicon.ico 请求,导致浏览器不断请求它。此请求会增加我们的计数器,从而导致偶数调用。

同步和控制

Go 使用 goroutine 并发处理请求。这可能会导致我们的代码中出现竞争条件,其中调用变量同时由多个 goroutine 递增。为了防止这种情况,我们使用原子操作同步对变量的访问。

或者,我们可以通过检查请求路径并忽略不是发往根端点的请求来防止计数器为每个请求递增。

代码修复

为了确保准确的调用计数,我们可以同步访问调用变量或有选择地忽略某些请求,例如favicon.ico:

// Use atomic operations
func HelloWorld(w http.ResponseWriter, r *http.Request) {
    count := atomic.AddInt64(&calls, 1)
    fmt.Fprintf(w, "You've called me %d times", count)
}

// Ignore specific requests
func HelloWorld(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" || r.URL.Path == "/favicon.ico" {
        return
    }
    count := atomic.AddInt64(&calls, 1)
    fmt.Fprintf(w, "You've called me %d times", count)
}
登录后复制

通过实施这些修改,我们的网络服务器将准确计算调用次数,而不管其他浏览器请求如何。

以上是为什么我的 Web 服务器似乎被调用了偶数次?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板