實現功能: websocket通訊
使用包:
github.com/gin-gonic/gin
// start is 專案執行前, 協程開啟start -> go manager.start()
func
(manager *clientmanager)
start()
) manager.
send
(jsonmessage, conn)
case conn :
=<
-manager.unregister:
log.
printf
("使用者離開:%v"
, conn.id)
if _, ok :
= manager.clients[conn]
; ok
) manager.
send
(jsonmessage, conn)
}case message :
=<
-manager.broadcast:
jsonmessage, _ :
= json.
marshal
(&message
)for conn :
= range manager.clients }}
}}// send is to send ws message to ws client
func
(manager *clientmanager)
send
(message [
]byte, ignore *client)}}
func
(c *client)
read()
()for log.
printf
("讀取到客戶端的資訊:%s"
,string
(message)
) manager.broadcast <
- message }}
func
(c *client)
write()
()for)
return
} log.
printf
("傳送到到客戶端的資訊:%s"
,string
(message)
) c.socket.
writemessage
(websocket.textmessage, message)}}
}//testhandler socket 連線 中介軟體
func testhandler
(c *gin.context)
//可以新增使用者資訊驗證
userid :=1
client :
=&client
manager.register <
- client
go client.
read()
go client.
write()
}
使用
定義個ws 請求路徑路由 , 路由驗證 使用testhandler 中介軟體, 用於公升級服務,驗證使用者資訊
例如 :
route.get("/ws",testhandler)
main 入口 寫入 go manager.start() 協程開啟服務
如果檔案不在main包裡, 需要寫上包名 例如: 包名為websocket
go websocket.manager.start()
每個方法的作用
start():啟動websocket服務
send():向連線websocket的管道chan寫入資料
read():讀取在websocket管道中的資料
write():通過websocket協議向連線到ws的客戶端傳送資料
testhandler(): ws鏈結互動的中介軟體, 用於協議公升級, 使用者資訊驗證等
前端測試 我使用的是 這個測試工具
**原處: 只是稍微修改下**
Websocket通訊過程
1.客戶端與伺服器建立連線 2.客戶端通過session向伺服器傳送訊息 3.伺服器接收客戶端的訊息,呼叫伺服器端的onmessage 方法包裝 生成訊息內容 新的訊息包括客戶端id 4.通過伺服器通過迴圈呼叫sendmessage 方法來傳送訊息至各個客戶端 5.客戶端收到伺服器的訊息呼叫客戶端的...
WebSocket簡單通訊
天氣越來越冷了,我只想大吼一聲 五星紅旗迎風飄揚。話不多說,先上demo位址,親測可用。環境 android studio 3.1.0 jdk 1.8 主要 request request new request.builder url ws 此位址為官網測試位址,請更換為自己後台測試位址。位址一定...
websocket的通訊原理
1.websocket和http一樣是一種通訊協議,是html5的一種新的協議。2.既然有了http協議了,為什麼還會有websocket呢?是因為是為了彌補http的單向請求的缺陷的 http的請求只能由客戶端發起 建立在tcp協議之上,伺服器端的實現比較容易 2.和http協議有著良好的相容性,...