首页 > 其他分享 >websocket.go

websocket.go

时间:2023-05-08 19:56:28浏览次数:38  
标签:Println websocket err fmt conns go readConnResult

package main

import (
"encoding/json"
"fmt"
"net/http"

"github.com/gorilla/websocket"

)

var UP = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
}

var conns = map[string]*websocket.Conn{}
var readConnResult = map[string]string{}

func handler(w http.ResponseWriter, r *http.Request) {
conn, err := UP.Upgrade(w, r, nil)
// fmt.Printf("%+v\n", conn)
// f, err := conn.File()
// fmt.Println(f.Fd())
if err != nil {
fmt.Println(err)
return
}

for {
	_, p, err := conn.ReadMessage()
	if err != nil {
		fmt.Println(err)
		break
	}

	err = json.Unmarshal(p, &readConnResult)
	if err != nil {
		fmt.Println("JSON转换失败:", err)
		return
	}
	conns[readConnResult["id"]] = conn
	// fmt.Printf("%T\n", readConnResult)
	// fmt.Println(readConnResult["msg"])

	for tempConn := range conns {
		if tempConn == readConnResult["id"] {
			continue
		}
		conns[tempConn].WriteMessage(websocket.TextMessage, []byte(readConnResult["msg"]))
		// fmt.Printf("%+v\n", conns[tempConn])
		// fmt.Println(tempConn)
	}
	fmt.Println("\n", "conns的长度为:", len(conns))
}
defer conn.Close()
delete(conns, readConnResult["id"])
fmt.Println("服务关闭")

}

func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}

标签:Println,websocket,err,fmt,conns,go,readConnResult
From: https://www.cnblogs.com/xivzhou/p/17382952.html

相关文章

  • Django框架简介
    python主流web框架django大而全自带的功能非常的多但是有时候会略显笨重类似于'航空母舰'flask小而精自带的功能非常的少但是第三方模块非常的多类似于'游骑兵'#flask的第三方模块加到一起甚至比django还多并且也越来越像django#flask由于过多......
  • Django之auth认证模块
    目录前戏:auth模块的使用auth之用户注册auth模块之登录request.user方法介绍request.user.is_authenticatedauth模块之网页首页auth模块之用户登录过直接跳转页面auth模块之用户修改密码auth模块之注销用户auth模块之扩展表前戏:django自带一个admin路由但是需要我们提供管理员......
  • python-手动借助google翻译来翻译文档
    1importos2importre3'''4读取指定的html文件5去掉所有的换行符6正则匹配特定项目:(?<=<divclass="block">).+?(?=</div>)7然后替换掉:</code>|<code>|<i>|</i>==>""8......
  • Django面试题
    1.DjangoORM查询中select_related和prefetch_related的区别??defselect_related(self,*fields)性能相关:表之间进行join连表操作,一次性获取关联的数据。总结:1.select_related主要针一对一和多对一关系进行优化。2.select_related使用SQL的JOIN语句进行......
  • Go源码阅读——github.com/medcl/esm —— bulk.go
    esm(AnElasticsearchMigrationTool)—— bulk.gohttps://github.com/medcl/esmrelease:8.7.1通过阅读好的源代码,细致思考,理性分析并借鉴优秀实践经验,提高zuoyang的编程水平,所谓"他山之石,可以攻玉" 该是如此吧。 /*Copyright2016Medcl(mATmedcl.net)Licensed......
  • godot游戏引擎的启动
    启动的入口代码在:platform/windows/godot_windows.cppWinMain()->main()intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){ godot_hinstance=hInstance; returnmain(0,nullptr);}main()->_main() intmain(int......
  • python Django校验表单登录案例
    定义一个视图函数,用于处理登录表单的提交动作。在该视图函数中,使用request.POST.get()方法获取POST请求中提交的用户名和密码数据,具体代码如下:fromdjango.shortcutsimportrender,redirectfromdjango.contrib.authimportauthenticate,logindeflogin_view(requ......
  • Django-Vue-Admin基于django+vue前后端分离开箱即用框架
    平台简介......
  • Go源码阅读——github.com/medcl/esm —— buffer.go
    esm(AnElasticsearchMigrationTool)—— buffer.gohttps://github.com/medcl/esmrelease:8.7.1通过阅读好的源代码,细致思考,理性分析并借鉴优秀实践经验,提高zuoyang的编程水平,所谓"他山之石,可以攻玉" 该是如此吧。 /*CopyrightMedcl(mATmedcl.net)Licensedun......
  • Go源码阅读——github.com/medcl/esm —— domain.go
    esm(AnElasticsearchMigrationTool)—— domain.gohttps://github.com/medcl/esmrelease:8.7.1通过阅读好的源代码,细致思考,理性分析并借鉴优秀实践经验,提高zuoyang的编程水平,所谓"他山之石,可以攻玉" 该是如此吧。 /*Copyright2016Medcl(mATmedcl.net)Licens......