需要用到的包:
github.com/gorilla/websocket服务端代码:
package main
import (
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
)
var upGrader = websocket.Upgrader{
CheckOrigin: func (r *http.Request) bool {
return true
},
}
//webSocket请求ping 返回pong
func WsHanderFunc(c *gin.Context) {
//升级get请求为webSocket协议
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
return
}
defer ws.Close()
for {
// 读取ws中的数据
mt, message, err := ws.ReadMessage()
if err != nil {
break
}
if string(message) == "ping" {
message = []byte("pong")
}
// 写入ws数据
err = ws.WriteMessage(mt, message)
if err != nil {
break
}
}
}
func main() {
r := gin.Default()
r.GET("/ws", WsHanderFunc)
r.Run("localhost:8080")
}
客户端代码:
package main
import (
"fmt"
"github.com/gorilla/websocket"
//"golang.org/x/net/websocket"
"log"
"time"
)
func main() {
url := "ws://localhost:8080/ws" //服务器地址
ws, _, err := websocket.DefaultDialer.Dial(url, nil)
if err != nil {
log.Fatal(err)
}
go func() {
for {
err := ws.WriteMessage(websocket.BinaryMessage,[]byte("ping"))
if err != nil {
log.Fatal(err)
}
time.Sleep(time.Second*2)
}
}()
for {
_, data, err := ws.ReadMessage()
if err != nil {
log.Fatal(err)
}
fmt.Println("receive: ", string(data))
}
}
WebJS代码: 找个支持ws的浏览器,都2020了应该都支持了吧
Python3 代码: Python 需要用到 websocket-client ,pip一下就好了
pip install websocket-client
import time
import threading
import websocket
event = threading.Event()
def on_message(ws, message):
print('get message from server,message is {}'.format(message))
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
print('ws opened....')
event.set() # 放开发送消息
def send_message(ws):
event.wait() # 等待连接就绪
for i in range(0,10):
ws.send('ping')
# try:
# ws.send('ping')
# except Exception as e:
# print(e)
# time.sleep(2)
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://localhost:8080/ws",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
t = threading.Thread(target=send_message,args=(ws,))
t.start()
ws.run_forever()



