go run server.goand in another terminal
go run client.go| package main | |
| import ( | |
| "log" | |
| "net/url" | |
| "time" | |
| "github.com/gorilla/websocket" | |
| ) | |
| func main() { | |
| u := url.URL{Scheme: "wss", Host: "localhost:8080", Path: "/echo"} | |
| log.Printf("connecting to %s", u.String()) | |
| c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) | |
| if err != nil { | |
| log.Fatal("dial:", err) | |
| } | |
| defer c.Close() | |
| go func() { | |
| for { | |
| _, message, err := c.ReadMessage() | |
| if err != nil { | |
| log.Println("read:", err) | |
| return | |
| } | |
| log.Printf("recv: %s", message) | |
| } | |
| }() | |
| time.Sleep(100 * time.Second) | |
| } |
| package main | |
| import ( | |
| "log" | |
| "time" | |
| "net/http" | |
| "github.com/gorilla/websocket" | |
| ) | |
| var upgrader = websocket.Upgrader{} // use default options | |
| var messageChan = make(chan string) | |
| func updateMsg() { | |
| for { | |
| time.Sleep(5 * time.Second) | |
| messageChan <- time.Now().Format("2006-01-02 03:04:05 PM") | |
| } | |
| } | |
| func echo(w http.ResponseWriter, r *http.Request) { | |
| c, err := upgrader.Upgrade(w, r, nil) | |
| if err != nil { | |
| log.Print("upgrade:", err) | |
| return | |
| } | |
| defer c.Close() | |
| for { | |
| c.WriteMessage(websocket.TextMessage, []byte(<- messageChan)) | |
| } | |
| } | |
| func main() { | |
| go updateMsg() | |
| http.HandleFunc("/echo", echo) | |
| log.Fatal(http.ListenAndServe("localhost:8080", nil)) | |
| } |
2020/12/16 20:34:09 dial:tls: first record does not look like a TLS handshake
exit status 1
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)的返回值是nil
https://localhost:8080/echo 不OK啊~