Skip to content

Instantly share code, notes, and snippets.

@legendtkl
Last active December 16, 2020 12:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save legendtkl/1922db71553c849ef0029429f737aadb to your computer and use it in GitHub Desktop.
Save legendtkl/1922db71553c849ef0029429f737aadb to your computer and use it in GitHub Desktop.
websocket demo

How to Run

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))
}
@savico-swee
Copy link

savico-swee commented Dec 16, 2020

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啊~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment