Golang http.HandleFunc:处理查询

时间:2017-08-09 13:27:34

标签: http go

同事们!

示例代码是标准的:

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以防止多任务处理?只有一个请求调用函数。如果任何功能仍然有效,则另一个请求将丢弃,并向客户端发送消息以便稍后再试。

1 个答案:

答案 0 :(得分:0)

首先,你有一个没有任何break子句的无限for循环。

如果没有会话或Cookie管理方面的帮助,您无法阻止客户端向您的服务器发送后续请求。我要做的是在客户访问您的服务器时为客户分配cookie,并为访问其他资源制作cookie。客户端成功发送请求后,更新cookie中的数据以反映当前客户端具有在后台运行的进程。您可能需要在服务器端进行一些会话管理,因为客户端可能会清除cookie。