用http.HandleFunc实现了一个http服务器,接受浏览器访问,浏览器的每次请求都会带1个参数logid,每个请求的logid都是唯一的。
对于每次请求,http服务器的处理步骤是:main.go接受参数logid,随后依次跳转到不同的go文件处理,每个go文件又会经过多个不同函数处理,处理过程中遇到异常情况会将logid写到日志文件。
现在问题是:在高并发情况下,如何保证写入日志文件中的logid对应的是相应的请求?比如先后来了两个请求1和2,分别对应的logid是10001和10002,如果用全局变量LOGID来存放logid,那么请求1先到,LOGID被赋值为10001,随后请求2到时LOGID被重新赋值成了10002,此时如果请求1出现异常,就会把10002写到日志文件中(但其实请求1对应的logid应该是10001)。
还有一种方式,就是将它存入map中,当然,key得是和这个请求相关的,也就是说,每个函数能够区分出是哪个请求,具体实现,你想想吧。
另外,这个东西有必要一直追踪?
#4
更多评论