golang如何实现websocket聊天室功能
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关golang如何实现websocket聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基本原理:1.引入了 golang.org
千家信息网最后更新 2025年11月07日golang如何实现websocket聊天室功能
这篇文章将为大家详细讲解有关golang如何实现websocket聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
基本原理:
1.引入了 golang.org/x/net/websocket 包。
2.监听端口。
3.客户端连接时,发送结构体: {"type":"login","uid":"我是用户名","msg":"登陆成功"}' .服务端根据login信息,维护一个map,用来存放不同用户的连接体。
4.有用户发言时,将msg内容轮询发给给一个用户。
5.客户端使用js websocket功能,当作客户端,开始聊天。
不足之处:只是根据客户端传的uid来区分用户,没有进行身份校验,不过对一个demo来说,也没必要。
server代码:
package main import ( "encoding/json" "fmt" "golang.org/x/net/websocket" "log" "net/http") //ProxyConfig 配置type MsgConfig struct { Type string `json:"type,omitempty"` Uid string `json:"uid,omitempty"` Msg string `json:"msg,omitempty"`} var connMap = make(map[string]*websocket.Conn) func Echo(ws *websocket.Conn) { var err error for { var reply string if err = websocket.Message.Receive(ws, &reply); err != nil { fmt.Println("Can't receive") break } replyMsg := MsgConfig{} json.Unmarshal([]byte(reply), &replyMsg) if replyMsg.Type == "login" && replyMsg.Uid != "" { connMap[replyMsg.Uid] = ws fmt.Println(connMap) } for k, v := range connMap { go sendMessage(replyMsg, v, k) } }} func sendMessage(replyMsg MsgConfig, conn *websocket.Conn, connUid string) { msg := replyMsg.Uid + "说:" + replyMsg.Msg if connUid == replyMsg.Uid { fmt.Println(msg) if replyMsg.Type == "login" { msg = "登陆成功" } else { msg = "你说:" + replyMsg.Msg } } if err := websocket.Message.Send(conn, msg); err != nil { fmt.Println("Can't send") } }func main() { http.Handle("/", websocket.Handler(Echo)) if err := http.ListenAndServe(":1234", nil); err != nil { log.Fatal("ListenAndServe:", err) }}客户端聊天:
可以在浏览器的控制台里面输入以下代码,进行聊天:
//ip:port设置成自己的
ws = new WebSocket("ws://127.0.0.1:1234");ws.onopen = function (ev) { ws.send('{"type":"login","uid":"我是用户名","msg":"我登陆了"}'); };ws.onmessage = function (ev) { if (ev.data){ console.log(ev.data) }};//下面这句可以多次发送,当作是聊天。ws.send('{"type":"msg","uid":"我是用户名","msg":"你好啊"}');客户端效果图:

服务器效果图:

关于"golang如何实现websocket聊天室功能"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
用户
客户
客户端
功能
用户名
篇文章
登陆
聊天室
成功
代码
内容
效果
效果图
更多
服务
不同
不错
实用
必要
你好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
银联软件开发价钱
杭州十大软件开发公司哪家好
广州有什么打车软件开发
老毛子 打印服务器
2021国家网络安全安全周
服务器如何增强内存
做软件开发销售好做吗
东阳东方网络技术有限公司
软件开发步骤文档
如何看懂数据库图表结构
济南 网络技术
米罗蒂奇数据库
vrising怎么进外国服务器
湖南警官学院网络安全
安卓直接操作数据库可行吗
双路服务器的内存一定要两条吗
计算机网络安全内容简介
数据库详细设计文档
全国软件开发企业
数据库著作
软件开发合同范本(详细)
网络技术基础教程11
利用宏判断数据库
服务器先做raid吗
军校网络安全专业毕业分配
苏州安卓软件开发需要多少钱
五华区专业性软件开发报价表
中国最好的服务器是哪个
网络安全的护卫
宁夏中国数据库技术大会