就是这样一个简单的demo 。
然后我们去看一下它的具体实现 。
在这个项目中首先定义了一个hub的结构体:
这个结构体中,clients代表所有已经注册的用户,broadcast管道会存储客户端发送来的信息 。register是一个*Client类型的管道,用于存储新注册的用户,unregister管道反之 。
我们打开main.go,main函数的源码为:
在这里首先会新开一个goroutine,去跑hub的run方法,run方法中一个死循环,不停地去轮询hub中的内容
如果取到了新用户,就加入到clients中 , 如果取到了信息,就循环所有的client,将信息写到client.send中 。
我们看到在请求路径为根的时候,它会请求一个函数 , 而这个函数就是将home.html发送到客户端 。
【go语言死循环 go 跳出循环】而在请求路径为“/ws”的时候,他会执行一个serveWS的函数 。
每当一个新的用户进来之后,首先将连接升级为长连接,然后将当前的client写到register中,由hub.run函数去做处理 。然后开启两个goroutine,一个去读client中发送来的数据,一个将数据写入到所有的client中,去发送给用户 。
这就是整个聊天室的实现原理 。
go语言死循环的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于go 跳出循环、go语言死循环的信息别忘了在本站进行查找喔 。
- redis同步模式阻死
- redis分布式锁死锁处理方案 redis宕机分布式锁
- 将数据保存到文件中c语言 将数据保存到mongodb
- mysql查询表死锁 mysql查询时锁定
- 罗布人村天气 mysql语言具有的功能
- redis编程语言 redis对应c语言
- mysql经常卡死 MySQL数据库自动卡退
- redis一般和什么语言一起开发 和redis类似的编程
- mongodb采用什么语言 mongodb的设计采用什么
- c连接mysql数据库 c连接mysql报错
