を取得した後、近くの接続、電子メールやsignedXmlGolang用WebSocketクライアント、結果
1.Iは、一部のユーザデータを受信LoginHandlerを持っていますWebSocketを介して他のサーバに
3.Save結果(成功またはエラー)signedXmlを送信する必要があり
4.Close接続
すべてのHTTPリクエストは接続を開き、1つのメッセージを送信し、1つの結果を取得し、最後にソケットを閉じます。私はチャンネルで試していたが成功しなかった。私のケースを実装することは可能ですか?
UPDATE
package main
import (
"log"
"net/url"
"github.com/gorilla/mux"
"github.com/gorilla/websocket"
"net/http"
)
func indexHandler(w http.ResponseWriter, r *http.Request) {
message := r.FormValue("message")
w.Write([]byte(message))
}
func postHandler(w http.ResponseWriter, r *http.Request) {
var (
message = r.FormValue("message")
u = url.URL{Scheme: "ws", Host: "echo.websocket.org", Path: "/"}
err error
out []byte
conn *websocket.Conn
)
log.Printf("message: %s\n", message)
log.Printf("connecting to %s\n", u.String())
conn, _, err = websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
log.Println("write")
if err = conn.WriteMessage(websocket.TextMessage, []byte(message)); err != nil {
log.Fatal("write:", err)
}
log.Println("read")
if _, out, err = conn.ReadMessage(); err != nil {
log.Fatal("read:", err)
}
w.Write(out)
log.Println("close")
conn.Close()
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/", indexHandler).Methods("GET")
r.HandleFunc("/post", postHandler).Methods("POST")
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
}
他のサーバーを変更できますか? WebSocketは実際にはこのような状況には適切ではないようです。 – Gavin
[ダイヤル](https://godoc.org/github.com/gorilla/websocket#Dialer.Dial)接続、[メッセージを書く](https://godoc.org/github.com/gorilla/websocket# Conn.WriteMessage)、[read](https://godoc.org/github.com/gorilla/websocket#Conn.ReadMessage)にメッセージを入力し、[閉じる]をクリックします(https://godoc.org/github.com/gorilla /websocket#Conn.Close)接続します。チャンネルを使用する必要はありません。これまでに試したことを示してください。 –
https://github.com/gorilla/websocket/blob/master/examples/echo/client.goの例を試しました。しかし、割り込み信号が受信されてから接続が終了するまで待機します。どのように私はチャネルと選択のステートメントなしでその例を書き換えることができますか? –