网站建设维护及使用管理办法,南昌app定制,单机无网络游戏,郑州高端网站案例WebSocket 是一种新型的网络通信协议#xff0c;可以在 Web 应用程序中实现双向通信。 WebSocket与HTTP协议的主要区别是#xff1a;
HTTP 和 WebSocket 协议的区别 HTTP 是单向的#xff0c;而 WebSocket 是双向的。
在客户端和服务器之间的通信中#xff0c;每个来自客… WebSocket 是一种新型的网络通信协议可以在 Web 应用程序中实现双向通信。 WebSocket与HTTP协议的主要区别是
HTTP 和 WebSocket 协议的区别 HTTP 是单向的而 WebSocket 是双向的。
在客户端和服务器之间的通信中每个来自客户端的 HTTP 请求都会建立一个新的连接并在从服务器收到响应后关闭而WebSocket连接只建立一次并在服务器或客户端终止连接之前重复使用。
HTTP 的空闲连接的超时时间为 60 秒。可用于响应时间非常短的调用。 WebSocket 空闲连接的超时时间为 3600 秒1 小时可应用于响应时间长于 60 秒的调用最大连接数为 250。
WebSocket服务器
首先创建一个 HTTP 服务器。在这个服务器中创建一个用于处理 WebSocket 连接的函数 handleWebSocket。
其实就是开启一个http服务器。
func HandleWebSocket(w http.ResponseWriter, r *http.Request) {}
func main() {http.HandleFunc(/ws, HandleWebSocket)http.ListenAndServe(:8080, nil)
}然后在该函数中使用 gorilla/websocket 包来处理 WebSocket 连接。
1.建立upgrade变量。
websocket协议建立连接的握手过程就是http协议的头部加入了upgrade字段upgrade:websocket。 首先要导入github.com/gorilla/websocket包
var upgrade websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,CheckOrigin: func(r *http.Request) bool {return true},
}2.升级http连接成websocket连接处理websocket连接
将http连接头部加入upgrade字段成为websocket协议。
func HandleHome(w http.ResponseWriter, r *http.Request) {//升级成websocketconn, err : upgrade.Upgrade(w, r, nil)if err ! nil {log.Println(err)}//websocket读写逻辑for {messageType, p, err : conn.ReadMessage()if err ! nil {log.Println(err)return}log.Println(receive:, string(p))conn.WriteMessage(messageType, []byte(hello, i am server))}
}WebSocket客户端
客户端主要是用来测试websocket服务器是否正确工作的下面提供两种websocket服务器。
htmljs实现
!DOCTYPE html
html
headtitleWebSocket Test/title
/head
bodyscriptvar ws new WebSocket(ws://localhost:8080/ws);ws.onopen function() {console.log(WebSocket connection opened.);ws.send(Hi From the Client!)};ws.onmessage function(event) {console.log(Received message: event.data);};ws.onclose function() {console.log(WebSocket connection closed.);};ws.onerror function(event) {console.log(WebSocket error: event.data);};/script
/body
/html
利用golang websocket包实现
func WebSocketClient() {conn, _, err : websocket.DefaultDialer.Dial(ws://127.0.0.1:8080/ws, nil)if err ! nil {panic(err)}defer conn.Close()for {time.Sleep(time.Second)conn.WriteMessage(websocket.TextMessage, []byte(hi i am client))_, p, err : conn.ReadMessage()if err ! nil {log.Println(err)}println(client recv:, string(p))}}