# dao_socket **Repository Path**: zhonglin-liu/dao_socket ## Basic Information - **Project Name**: dao_socket - **Description**: 简单易用的websocket服务 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-02 - **Last Updated**: 2025-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: WebSocket ## README ## 简介 开箱即用的websocket服务 ## 使用方式 ### 服务端 ```go func main() { client := redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", }) hub := socket.NewHub( socket.WithLogin(func(w http.ResponseWriter, r *http.Request) (uid int64, err error) { token := r.Header.Get("token") fmt.Println(token) uid, err = strconv.ParseInt(token, 10, 64) return }), socket.WithDispatch(func(uid int64, msg []byte) { // your logic fmt.Println("WithDispatch", string(msg), uid) uid = 456 socket.GetHub().Send2User(uid, time.Now().Unix(), msg) }), socket.WithRedisClient(1000, 3600, client), ) go hub.Run() http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) { socket.ServeWs(hub, w, r) }) fmt.Println("start :8080") http.ListenAndServe(":8080", nil) } ``` ### 客户端 ```go func TestClient(t *testing.T) { u := url.URL{Scheme: "ws", Host: "127.0.0.1:8080", Path: "/ws"} conn, resp, err := websocket.DefaultDialer.Dial(u.String(), http.Header{"Sec-Websocket-Protocol": []string{"ws"}, "token": []string{"456"}}) if err != nil { t.Error(err) return } b, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(b)) go func() { for { _, msg, err := conn.ReadMessage() if err != nil { t.Error(err) return } fmt.Println("msg", string(msg)) } }() //time.Sleep(time.Second * 100) for i := 0; i < 5; i++ { err := conn.WriteMessage(websocket.TextMessage, []byte("hello")) if err != nil { t.Error(err) return } fmt.Println("send success") time.Sleep(time.Second * 2) } } ```