当前位置: 首页 > news >正文

政府网站数据开放 建设方案如何制作一个属于自己的网站

政府网站数据开放 建设方案,如何制作一个属于自己的网站,企业建立网站账户如何做,网站的下载二维码怎么做golang使用 Gin实现 websocket,这里笔者重新搭建一个项目 1、创建项目安装依赖 项目名为 go-gin-websocket 在指定文件夹下,新建项目文件夹 go-gin-websocket 进入项目文件夹,打开cmd窗口,在项目(go-gin-websocket&a…

golang使用 Gin实现 websocket,这里笔者重新搭建一个项目

1、创建项目安装依赖

项目名为 go-gin-websocket

在指定文件夹下,新建项目文件夹 go-gin-websocket

d90ea17676bd4ff68ddeb5ecd43845f5.png

进入项目文件夹,打开cmd窗口,在项目(go-gin-websocket)文件夹路径下,执行初始化命令 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、搭建项目

在项目目录下新建controller、static、templates、ws文件夹,分别用来存放controller代码、静态文件、页面、websocket代码

05f4bfb81ae94370aa0c7f51b6194ab1.png

在templates目录下新建 index.html页面

<!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 = "身无彩凤双飞翼,心有灵犀一点通"//发送消息webSocket.send(msg);};//接收服务端发送的消息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("升级协议", 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("获取客户端发送的消息:" + string(message))fmt.Println(mt)if err != nil {log.Println(err)break}var msg = "春风得意马蹄疾,一日看尽长安花"err2 := conn.WriteMessage(websocket.TextMessage, []byte(msg))if err2 != nil {log.Println("write:", err2)break}}}

在项目根目录下新建 main.go

243f3a9eeafa4deda10a5bc7c77d3da6.png

main.go内容

package mainimport ("github.com/gin-gonic/gin""go-gin-websocket/controller""go-gin-websocket/ws"
)func main() {e := gin.Default()//html页面位置e.LoadHTMLGlob("templates/*")//静态文件位置e.Static("/static", "./static")e.GET("/", controller.Index)e.GET("/ws", ws.InitWebSocket)e.Run("0.0.0.0:8080")
}

3、运行测试

浏览器请求 http://localhost:8080/

1da3a379a25041bfb3861d916c946168.gif

4、添加session

添加session用来存储在线用户

这里使用一个map用来保存,key是用户id,value是websocket连接,再加一个读写锁保证线程安全

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("升级协议", 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("获取客户端发送的消息:" + string(message))fmt.Println(mt)if err != nil {log.Println(err)break}var msg = "春风得意马蹄疾,一日看尽长安花"err2 := conn.WriteMessage(websocket.TextMessage, []byte(msg))if err2 != nil {log.Println("write:", err2)break}}}

至此完

http://www.mmbaike.com/news/97115.html

相关文章:

  • 国内最新新闻热点事件摘抄百度整站优化
  • 网站技术介绍品牌推广是做什么的
  • 网站建设发展现状福州seo
  • 发外链的网站都要企业注册西安优化网站公司
  • 织梦个人网站谷歌seo外链平台
  • 做瞹瞹嗳视频网站郑州今天刚刚发生的新闻
  • 免费一级做网站百度营稍
  • 旅游网站制作网站收录服务
  • 嘉兴php网站开发域名停靠网页app推广大全
  • 外企网站建设公司排名seo优化的作用
  • 做网站的软件page新网站怎么快速收录
  • 如何做网站链接分享朋友圈站内关键词排名优化软件
  • 成都网站建设 3e友链购买网
  • 做网站代理需要办什么执照google搜索优化
  • 外国人做的汉子网站网站建设公司哪家好?该如何选择
  • 企业网站备案所需材料 amp软文是指什么
  • 郑州网站开发网站开发互联网营销师题库
  • 管理手机网站阿里云域名注册查询
  • wordpress部署ssl厦门seo优化
  • 网站开发工资一般多少钱常见的推广平台有哪些
  • 东莞门户网站建设拉新推广平台有哪些
  • 景德镇网站维护深圳seo优化排名公司
  • 棋牌游戏网站建设交换链接名词解释
  • 2015做那些网站致富短视频营销的特点
  • 网站前端交互功能案例分析企业网站建设的一般要素
  • 石家庄市做网站深圳网
  • 多个网站集成在一个页面我要下载百度
  • 网站建设收费标准公司网络营销推广软件
  • 贵州住房与城乡建设厅网站广告网
  • 济宁网站建设sem是什么测试