golang.org/x/net/websocket 的示例(deprecated~囧)

382 阅读1分钟

最近在学习 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!
.