Go语言怎么实现一个简单的并发聊天室
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,今天小编给大家分享一下Go语言怎么实现一个简单的并发聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
千家信息网最后更新 2025年01月19日Go语言怎么实现一个简单的并发聊天室
今天小编给大家分享一下Go语言怎么实现一个简单的并发聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
并发聊天服务器
这里主要是实现一个简单的并发聊天服务器。首先,客户端可以在服务器中注册自己的信息(登录以及退出),客户端发出的所有的信息由服务器向各个客户端进行转发,或者换句话说是广播。
具体代码
服务端
说的再多,没有代码简单明了,直接上代码~
package mainimport ( "bufio" "fmt" "log" "net")type client chan <- string //定义一个单向的向外发送数据的通道var ( entering = make(chan client) leaving = make(chan client) messages = make(chan string))func main() { listener, err := net.Listen("tcp","localhost:8000") if err != nil { log.Fatal("network is broken", err) } go broadcaster() for { conn, err := listener.Accept() if err != nil { log.Print(err) continue } go handleConn1(conn) }}func broadcaster() { clients := make(map[client]bool) //存储每个client的登录状态 for{ select { case msg := <-messages: for cli := range clients { cli <- msg } case cli := <-entering: clients[cli] = true case cli := <-leaving: delete(clients,cli) close(cli) } }}func handleConn1(conn net.Conn) { ch := make(chan string) go clientWriter(conn, ch) who := conn.RemoteAddr().String() ch <- "You are " + who entering <- ch messages <- who + "has arrived" input := bufio.NewScanner(conn) for input.Scan() { messages <- who + ":" + input.Text() } leaving <- ch messages <- who + "has left" conn.Close()}func clientWriter(conn net.Conn, ch <- chan string) { for msg := range ch { fmt.Fprintln(conn, msg) }}
客户端
客户端相对简单,只是涉及到信息的发送和接受工作。
package mainimport ( "io" "log" "net" "os")func main() { conn, err := net.Dial("tcp","localhost:8000") if err != nil { log.Fatal("Connected has been refused!",err) } defer conn.Close() go mesCopy(os.Stdout,conn) mesCopy(conn,os.Stdin)}func mesCopy(des io.Writer, res io.Reader) { if _, err := io.Copy(des, res); err != nil { log.Print("wrong!") }}
以上就是"Go语言怎么实现一个简单的并发聊天室"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
客户
客户端
服务
服务器
知识
篇文章
代码
信息
聊天室
语言
内容
登录
不同
很大
单向
只是
大部分
就是
换句话说
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
dhcp服务器清除缓存
新乡市共创网络技术有限公司
软件开发任务要求
租有服务器
腾讯网络技术岗好吗
舒特一卡通连接数据库错误
想要学习网络技术去哪里
sql2000空白数据库
台式无线网卡管理服务器
网络安全绘画简笔画儿童
网络安全防诈骗活动内容
肿瘤数据库大全
外文全文数据库有哪些
对于网络技术的观点
讲网络安全带来的风险
网络安全精美手抄报内容
陕西智慧管理平台软件开发
国家网络安全局局长王
江苏hpe塔式服务器哪家好
平板提示找不到服务器
文献检索报告计算机网络技术
微信无法连接到服务器1237
网络安全产品展板装饰
蓝思网络技术有限公司排名
数据库的特点举例
线上宣传网络安全简报
网络安全法保存信息多久
fuji服务器怎么用光盘启动
小学网络安全五年级教案
微软的数据库怎么样