登录
首页 >  Golang >  Go问答

golang Socket长连接 模拟心跳

来源:SegmentFault

时间:2023-01-10 17:37:56 238浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《golang Socket长连接 模拟心跳》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下go,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

func Dotings(tcpConn *net.TCPConn) {
    data := make([]byte, 128)
    for {
        //读取数据
        res, _ := tcpConn.Read(data)
        str := string(data[:res])
        fmt.Println(str)
        
        messnager := make(chan byte)
        //检测每次Client是否有数据传来
        go GravelChannel(data[:res], messnager)
        //心跳计时
        go HeartBeating(tcpConn, messnager)
       }
}
func HeartBeating(tcpConn *net.TCPConn, readerChannel chan byte) {
    select {
    case 

按道理是如果经过5秒,客户端没有发来消息就会关闭连接,但当Client没有发消息时,感觉会阻塞到 res, err := tcpConn.Read(data) 这块。不能执行 go GravelChannel(data[:res], messnager) 和 go HeartBeating(tcpConn, messnager)
(求大神指点)

正确答案

你的思路有问题,tcpConn.Read(data)这块肯定会阻塞,等待着客户端的消息,如果要限时的话,使用

tcpConn.SetDeadline(t time.Time)
这个函数设定时间,设置5秒后的话可以是
time.Now().Add(5 * time.Second)
,这样tcpConn.Read最后阻塞5秒然后就返回错误,并且err.Timeout()是true。

到这里,我们也就讲完了《golang Socket长连接 模拟心跳》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表