同事们!
示例代码是标准的:
func echo(w http.ResponseWriter, r *http.Request) {
c, _ := upgrader.Upgrade(w, r, nil)
defer c.Close()
for {
_, message, _ := c.ReadMessage()
log.Printf("recv: %s", message)
if string(message) == "qwerty"{
func (){
fmt.Println("in func 1")
time.Sleep(time.Second * 10) // here method performs some work
}()
}
if string(message) == "asdfg"{
func (){
fmt.Println("in func 2")
time.Sleep(time.Second * 10) // here method performs some work
}()
}
}
}
func main() {
http.HandleFunc("/echo", echo)
log.Println("Socket waiting connection on * : 3000")
log.Fatal(http.ListenAndServe(":3000", nil))
}
我遇到了这样的麻烦。 我的应用程序不是用户的多任务。用户必须请求方法并在系统繁忙时等待。但是当被调用的方法仍在工作时,如果同一客户端调用另一个方法,则服务器缓冲其请求,并且方法2在前一个完成后立即启动。但是,我需要应用程序的另一个行为:如果任何方法性能未完成,客户端必须收到一条消息,前一个查询仍在进行中,并且必须删除他的新查询。如何修改echo func以防止多任务处理?只有一个请求调用函数。如果任何功能仍然有效,则另一个请求将丢弃,并向客户端发送消息以便稍后再试。
答案 0 :(得分:0)
首先,你有一个没有任何break子句的无限for循环。
如果没有会话或Cookie管理方面的帮助,您无法阻止客户端向您的服务器发送后续请求。我要做的是在客户访问您的服务器时为客户分配cookie,并为访问其他资源制作cookie。客户端成功发送请求后,更新cookie中的数据以反映当前客户端具有在后台运行的进程。您可能需要在服务器端进行一些会话管理,因为客户端可能会清除cookie。