websocket通訊,chan通訊,聊天

2021-09-24 18:36:27 字數 2581 閱讀 4674

實現功能: 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協議有著良好的相容性,...