同僚!私は、このような悩みを持っているゴランhttp:HandleFunc:ハンドリングクエリ
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は前のメソッドが完了するとすぐに開始します。ただし、アプリケーションから別の動作が必要です。メソッドのパフォーマンスが完了していない場合、クライアントはメッセージを受信し、以前のクエリがまだ進行中であり、新しいクエリを削除する必要があります。エコー機能を変更してマルチタスクを防止するにはどうすればよいですか? 1つの要求だけが関数を呼び出します。いずれかの機能がまだ機能している場合は、後で試すために、別の要求がクライアントにメッセージとともにドロップされます。
あなたが説明したことを行う必要があります。これを行うための組み込みメソッドはありません。同じユーザーかどうかを判断するための組み込みメソッドもありません。実装を試してください。問題が発生した場合は、それについて質問を投稿してください。 – Adrian