既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
WebSocket的工作流程始于一次特殊的HTTP请求,通过升级协议(Upgrade)头信息,客户端请求将HTTP连接转换为WebSocket连接。如果服务器同意升级,那么双方就进入WebSocket协议的通信阶段,直至连接关闭为止。
golang中使用websocket
在Go语言中使用WebSocket,您可以使用第三方库如github.com/gorilla/websocket
来实现。以下是一个基本的WebSocket服务器端和客户端示例:
go get -u github.com/gorilla/websocket
Server端
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true // 允许所有源,生产环境中应根据需要设置更严格的CORS策略
},
}
func serveWs(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("Failed to set up WebSocket connection:", err)
return
}
defer conn.Close()
for {
// 读取客户端发送的消息
msgType, msg, err := conn.ReadMessage()
if err != nil {
log.Println("Failed to read WebSocket message:", err)
break
}
log.Printf("Received message from client: %s", msg)
// 假设我们只是简单地将接收到的消息回传给客户端
err = conn.WriteMessage(msgType, msg)
if err != nil {
log.Println("Failed to send WebSocket message:", err)
break
}
}
}
func main() {
http.HandleFunc("/ws", serveWs)
log.Println("Starting WebSocket server on :8080...")
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("Error starting server:", err)
}
}
Client端
package main
import (
"github.com/gorilla/websocket"
"log"
"net/url"
)
func main() {
u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"}
log.Printf("Connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("Failed to connect to WebSocket server:", err)
}
defer c.Close()
err = c.WriteMessage(websocket.TextMessage, []byte("Hello from client!"))
if err != nil {
log.Println("Failed to send message:", err)
![img](https://img-blog.csdnimg.cn/img_convert/c46a0764f677ae40136fd03279b79234.png)
![img](https://img-blog.csdnimg.cn/img_convert/c84792344d12d5ff74afec9a713bbb1c.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
s/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**