您的位置:首页 > 财经 > 产业 > 做知识付费哪个平台好做_奥凯航空公司官方网站_青岛专业网站制作_如何自己创建网站

做知识付费哪个平台好做_奥凯航空公司官方网站_青岛专业网站制作_如何自己创建网站

2025/3/5 3:19:44 来源:https://blog.csdn.net/qq_23564667/article/details/145039498  浏览:    关键词:做知识付费哪个平台好做_奥凯航空公司官方网站_青岛专业网站制作_如何自己创建网站
做知识付费哪个平台好做_奥凯航空公司官方网站_青岛专业网站制作_如何自己创建网站

本项目使用 github.com/gorilla/websocket 库 安装:

go get github.com/gorilla/websocket

服务端代码

package mainimport ("fmt""log""net/http""github.com/gorilla/websocket"
)func WebSocketServer() {addr := "localhost:8002"http.HandleFunc("/wshandler", WebSocketUpgrade)log.Println("Starting websocket server at " + addr)go func() {err := http.ListenAndServe(addr, nil)if err != nil {log.Fatal(err)}}()log.Println("WebSocket 服务器正在运行。按Ctrl+C退出")select {}
}func WebSocketUpgrade(resp http.ResponseWriter, req *http.Request) {// 初始化 Upgraderupgrader := websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,CheckOrigin: func(r *http.Request) bool {return true},} // 使用默认的选项// 第三个参数是响应头,默认会初始化conn, err := upgrader.Upgrade(resp, req, nil)if err != nil {log.Println(err)return}defer conn.Close()// 读取客户端的发送额消息,并返回fmt.Println("websocket 连接成功")// fmt.Println(conn)go ReadMessage(conn)select {}
}// 读取客户端发送的消息,并返回
func ReadMessage(conn *websocket.Conn) {for {// 消息类型:文本消息和二进制消息messageType, msg, err := conn.ReadMessage()if err != nil {log.Println(err)return}fmt.Println("receive msg:", string(msg))err = conn.WriteMessage(messageType, []byte("The server has received the message"))if err != nil {log.Println("write error:", err)return}}
}func main() {WebSocketServer()
}

客户端

package mainimport ("encoding/json""fmt""log""time""github.com/gorilla/websocket"
)func main() {wsUrl := "ws://localhost:8002/wshandler"// 连接WebSocket服务器conn, _, err := websocket.DefaultDialer.Dial(wsUrl, nil)if err != nil {log.Println(err)return}log.Println("连接成功")go func() {for {// 读取消息messageType, message, err := conn.ReadMessage()if err != nil {log.Fatal(err)}log.Println("消息类型:", messageType, "消息数据:", string(message))}}()// 发送消息controlMessage := map[string]interface{}{"type": "control","data": "hello word",}jsonData, err := json.Marshal(controlMessage)if err != nil {fmt.Println("Error marshalling JSON:", err)return}// 间隔2秒发送一次消息ticket := time.NewTicker(2 * time.Second)defer ticket.Stop()for {<-ticket.C// 2. 发送消息err = conn.WriteMessage(websocket.TextMessage, []byte(string(jsonData)))if err != nil {log.Fatal(err)}log.Println("发送消息成功")}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com