go run server.go
and 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啊~