ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## WebSocket ### 使用 `net` 库的 WebSocket #### 服务端 `server.go` ```go package main import ( "fmt" "log" "github.com/labstack/echo" "github.com/labstack/echo/middleware" "golang.org/x/net/websocket" ) func hello(c echo.Context) error { websocket.Handler(func(ws *websocket.Conn) { defer ws.Close() for { // Write err := websocket.Message.Send(ws, "Hello, Client!") if err != nil { log.Fatal(err) } // Read msg := "" err = websocket.Message.Receive(ws, &msg) if err != nil { log.Fatal(err) } fmt.Printf("%s\n", msg) } }).ServeHTTP(c.Response(), c.Request()) return nil } func main() { e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Static("/", "../public") e.GET("/ws", hello) e.Logger.Fatal(e.Start(":1323")) } ``` ### 使用 `gorilla` 的 WebSocket #### 服务端 `server.go` ```go package main import ( "fmt" "log" "github.com/labstack/echo" "github.com/gorilla/websocket" "github.com/labstack/echo/middleware" ) var ( upgrader = websocket.Upgrader{} ) func hello(c echo.Context) error { ws, err := upgrader.Upgrade(c.Response(), c.Request(), nil) if err != nil { return err } defer ws.Close() for { // Write err := ws.WriteMessage(websocket.TextMessage, []byte("Hello, Client!")) if err != nil { log.Fatal(err) } // Read _, msg, err := ws.ReadMessage() if err != nil { log.Fatal(err) } fmt.Printf("%s\n", msg) } } func main() { e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Static("/", "../public") e.GET("/ws", hello) e.Logger.Fatal(e.Start(":1323")) } ``` ### 客户端 `index.html` ```html <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>WebSocket</title> </head> <body> <p id="output"></p> <script> var loc = window.location; var uri = 'ws:'; if (loc.protocol === 'https:') { uri = 'wss:'; } uri += '//' + loc.host; uri += loc.pathname + 'ws'; ws = new WebSocket(uri) ws.onopen = function() { console.log('Connected') } ws.onmessage = function(evt) { var out = document.getElementById('output'); out.innerHTML += evt.data + '<br>'; } setInterval(function() { ws.send('Hello, Server!'); }, 1000); </script> </body> </html> ``` ### 输出示例 `Client` ```sh Hello, Client! Hello, Client! Hello, Client! Hello, Client! Hello, Client! ``` `Server` ```sh Hello, Server! Hello, Server! Hello, Server! Hello, Server! Hello, Server! ```