中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

政府網(wǎng)站數(shù)據(jù)開放 建設(shè)方案網(wǎng)絡(luò)營(yíng)銷師證書有用嗎

政府網(wǎng)站數(shù)據(jù)開放 建設(shè)方案,網(wǎng)絡(luò)營(yíng)銷師證書有用嗎,成都微信網(wǎng)站建設(shè)推廣,高端品牌網(wǎng)站建設(shè)興田德潤(rùn)在哪兒golang使用 Gin實(shí)現(xiàn) websocket,這里筆者重新搭建一個(gè)項(xiàng)目 1、創(chuàng)建項(xiàng)目安裝依賴 項(xiàng)目名為 go-gin-websocket 在指定文件夾下,新建項(xiàng)目文件夾 go-gin-websocket 進(jìn)入項(xiàng)目文件夾,打開cmd窗口,在項(xiàng)目(go-gin-websocket&a…

golang使用?Gin實(shí)現(xiàn) websocket,這里筆者重新搭建一個(gè)項(xiàng)目

1、創(chuàng)建項(xiàng)目安裝依賴

項(xiàng)目名為?go-gin-websocket

在指定文件夾下,新建項(xiàng)目文件夾?go-gin-websocket

d90ea17676bd4ff68ddeb5ecd43845f5.png

進(jìn)入項(xiàng)目文件夾,打開cmd窗口,在項(xiàng)目(go-gin-websocket)文件夾路徑下,執(zhí)行初始化命令?go mod init?go-gin-websocket

go mod init?go-gin-websocket

ef282acdb84846dbbaf3c2159feec61c.png

安裝依賴

安裝gin

go get -u github.com/gin-gonic/gin

?安裝websocket

go get github.com/gorilla/websocket

ce9b1f9416f24320a90e01cf7ac8aef2.png

2、搭建項(xiàng)目

在項(xiàng)目目錄下新建controller、static、templates、ws文件夾,分別用來(lái)存放controller代碼、靜態(tài)文件、頁(yè)面、websocket代碼

05f4bfb81ae94370aa0c7f51b6194ab1.png

在templates目錄下新建 index.html頁(yè)面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
hello
<script>var webSocket;try {webSocket = new WebSocket('ws://127.0.0.1:8080/ws?id=abc123456789');}catch (e) {console.log(e)}webSocket.onerror = function(event) {}//與WebSocket建立連接webSocket.onopen = function(event) {console.log('建立連接')console.log(JSON.stringify(event))var msg = "身無(wú)彩鳳雙飛翼,心有靈犀一點(diǎn)通"//發(fā)送消息webSocket.send(msg);};//接收服務(wù)端發(fā)送的消息webSocket.onmessage=function (m) {console.log(m)console.log(m.data)}
</script>
</body>
</html>

在controller目錄下新建?page_controller.go

package controllerimport "github.com/gin-gonic/gin"func Index(c *gin.Context) {c.HTML(200, "index.html", nil)
}

在ws目錄下新建?websocket.go

package wsimport ("fmt""github.com/gin-gonic/gin""github.com/gorilla/websocket""log""net/http"
)func InitWebSocket(c *gin.Context) {var upgrader = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,CheckOrigin: func(r *http.Request) bool {log.Println("升級(jí)協(xié)議", r.Header["User-Agent"])return true},}conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)if err != nil {log.Println(err)return}defer conn.Close()userId := c.Query("id")log.Println("用戶id:", userId)for {mt, message, err := conn.ReadMessage()log.Println("獲取客戶端發(fā)送的消息:" + string(message))fmt.Println(mt)if err != nil {log.Println(err)break}var msg = "春風(fēng)得意馬蹄疾,一日看盡長(zhǎng)安花"err2 := conn.WriteMessage(websocket.TextMessage, []byte(msg))if err2 != nil {log.Println("write:", err2)break}}}

在項(xiàng)目根目錄下新建?main.go

243f3a9eeafa4deda10a5bc7c77d3da6.png

main.go內(nèi)容

package mainimport ("github.com/gin-gonic/gin""go-gin-websocket/controller""go-gin-websocket/ws"
)func main() {e := gin.Default()//html頁(yè)面位置e.LoadHTMLGlob("templates/*")//靜態(tài)文件位置e.Static("/static", "./static")e.GET("/", controller.Index)e.GET("/ws", ws.InitWebSocket)e.Run("0.0.0.0:8080")
}

3、運(yùn)行測(cè)試

瀏覽器請(qǐng)求?http://localhost:8080/

1da3a379a25041bfb3861d916c946168.gif

4、添加session

添加session用來(lái)存儲(chǔ)在線用戶

這里使用一個(gè)map用來(lái)保存,key是用戶id,value是websocket連接,再加一個(gè)讀寫鎖保證線程安全

package wsimport ("fmt""github.com/gin-gonic/gin""github.com/gorilla/websocket""log""net/http""sync"
)var connects = make(map[string]*websocket.Conn)
var lock sync.RWMutexfunc addSession(id string, conn *websocket.Conn) {lock.Lock()connects[id] = conndefer lock.Unlock()
}
func getSession(id string) *websocket.Conn {lock.RLock()defer lock.RUnlock()return connects[id]
}
func removeSession(id string) {lock.Lock()delete(connects, id)defer lock.Unlock()
}func InitWebSocket(c *gin.Context) {var upgrader = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,CheckOrigin: func(r *http.Request) bool {log.Println("升級(jí)協(xié)議", r.Header["User-Agent"])return true},}conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)if err != nil {log.Println(err)return}defer conn.Close()userId := c.Query("id")log.Println("用戶id:", userId)//添加sessionaddSession(userId, conn)for {mt, message, err := conn.ReadMessage()log.Println("獲取客戶端發(fā)送的消息:" + string(message))fmt.Println(mt)if err != nil {log.Println(err)break}var msg = "春風(fēng)得意馬蹄疾,一日看盡長(zhǎng)安花"err2 := conn.WriteMessage(websocket.TextMessage, []byte(msg))if err2 != nil {log.Println("write:", err2)break}}}

至此完

http://www.risenshineclean.com/news/63211.html

相關(guān)文章:

  • 免費(fèi)信息網(wǎng)站建設(shè)平臺(tái)有趣的軟文
  • 保定市城鄉(xiāng)規(guī)劃建設(shè)局網(wǎng)站公司宣傳網(wǎng)頁(yè)怎么做
  • 政府網(wǎng)站建設(shè)監(jiān)管力度不夠成都seo達(dá)人
  • 杭州網(wǎng)站制作報(bào)價(jià)推廣網(wǎng)站要注意什么
  • 找合作項(xiàng)目app平臺(tái)濟(jì)南做seo外包
  • 外包公司做的網(wǎng)站貼吧友情鏈接在哪
  • 專業(yè)做幼兒園網(wǎng)站萬(wàn)網(wǎng)域名注冊(cè)查詢網(wǎng)
  • xxx網(wǎng)站建設(shè)規(guī)劃治療腰椎間盤突出的特效藥
  • 合肥 做網(wǎng)站濟(jì)南seo官網(wǎng)優(yōu)化
  • 香港公司如何做國(guó)內(nèi)網(wǎng)站的備案小說(shuō)推廣關(guān)鍵詞怎么弄
  • 重慶旅游景點(diǎn)廈門seo優(yōu)化多少錢
  • 網(wǎng)站頭部導(dǎo)航代碼網(wǎng)站seo優(yōu)化怎么做
  • 美橙網(wǎng)站建設(shè)怎么做推廣一次多少錢
  • 企業(yè)手機(jī)網(wǎng)站建設(shè)策劃書百度搜索次數(shù)統(tǒng)計(jì)
  • wordpress用戶前端創(chuàng)建相冊(cè)關(guān)鍵詞seo公司推薦
  • 買域名后 怎么做網(wǎng)站長(zhǎng)沙網(wǎng)
  • 網(wǎng)站建設(shè)費(fèi) 什么科目鄭州seo網(wǎng)站有優(yōu)化
  • wordpress清新seo服務(wù)包括哪些
  • wordpress inerhtmlseo怎么做優(yōu)化工作
  • 中山外貿(mào)網(wǎng)站建設(shè)網(wǎng)絡(luò)營(yíng)銷師報(bào)名官網(wǎng)
  • 外行怎么做網(wǎng)站十大廣告投放平臺(tái)
  • 鋼絲網(wǎng)片企業(yè)seo網(wǎng)站營(yíng)銷推廣
  • 輿情信息網(wǎng)站微信營(yíng)銷怎么做
  • 青島新聞網(wǎng)官方網(wǎng)站今日頭條新聞下載安裝
  • 北京幼兒園報(bào)名網(wǎng)站香飄飄奶茶軟文
  • 河南核酸檢測(cè)vip抖音seo查詢工具
  • 戶縣做網(wǎng)站哈爾濱最新今日頭條新聞
  • 企業(yè)建立網(wǎng)站需要產(chǎn)品代理推廣方案
  • 網(wǎng)站建設(shè)制作設(shè)計(jì)營(yíng)銷 廣州網(wǎng)站頁(yè)面怎么優(yōu)化
  • 江寧做網(wǎng)站價(jià)格拉新工作室在哪里接項(xiàng)目