最近在学习 golang 中的 websocket ,下面的内容是为了便于查找而记录的。
golang.org/x/net/websocket 的文档中,有两个示例,一个是服务端,一个是客户端。
这两个示例因为 URL 不一致,客户端无法访问服务端。
将 URL 修改一致之后就可以访问了。
服务端:
原链接:websocket package - golang.org/x/net/websocket - Go Packages
package main
import (
"io"
"net/http"
"golang.org/x/net/websocket"
)
// Echo the data received on the WebSocket.
func EchoServer(ws *websocket.Conn) {
io.Copy(ws, ws)
}
// This example demonstrates a trivial echo server.
func main() {
http.Handle("/echo", websocket.Handler(EchoServer))
err := http.ListenAndServe(":12345", nil)
if err != nil {
panic("ListenAndServe: " + err.Error())
}
}
客户端:
原链接:websocket package - golang.org/x/net/websocket - Go Packages
将 URL 改为服务端监听的 URL : ws://localhost:12345/echo
package main
import (
"fmt"
"log"
"golang.org/x/net/websocket"
)
func main() {
origin := "http://localhost/"
url := "ws://localhost:12345/echo"
ws, err := websocket.Dial(url, "", origin)
if err != nil {
log.Fatal(err)
}
if _, err := ws.Write([]byte("hello, world!\n")); err != nil {
log.Fatal(err)
}
var msg = make([]byte, 512)
var n int
if n, err = ws.Read(msg); err != nil {
log.Fatal(err)
}
fmt.Printf("Received: %s.\n", msg[:n])
}
运行结果:
$ go run client.go
Received: hello, world!
.