您的位置:首页 > 理论基础 > 计算机网络

leaf开源服务器第三节-分析TCP消息通信之增加Glog日志(1)

2017-11-15 10:40 337 查看
leaf开源游戏服务器源码
leaf开源服务器第一节-分析项目结构
leaf开源服务器第二节-分析之配置文件说明及服务器运行

大家好,我是Golang语言社区的站长,今天给大家带来的是关于leaf的游戏服务器通信分析;leaf支持TCP和websocket,我们首先分析TCP的链接机制;由于原作者的log模块不好用,日志打印的时间标志和文件定位信息缺失,所以直接增加了glog第三方日志库;这个方便我们调试;这个看个人的习惯主要还

client代码;

import (

        "bufio"

        "fmt"

        "log"

        "net"

        "os"

        "strings"

)

//连接服务器

func connectServer() {

        //接通

        conn, err := net.Dial("tcp", "localhost:8888")

        checkError(err)

        fmt.Println("连接成功!\n")

        //输入

        inputReader := bufio.NewReader(os.Stdin)

        fmt.Println("你是谁?")

        name, _ := inputReader.ReadString('\n')

        //

        trimName := strings.Trim(name, "\r\n")

        conn.Write([]byte(trimName + " 接入了\n "))

        for {

                fmt.Println("我们来聊天吧!按quit退出")

                //读一行

                input, _ := inputReader.ReadString('\n')

                trimInput := strings.Trim(input, "\r\n")

                //如果quit就退出

                if trimInput == "quit" {

                        fmt.Println("再见")

                        conn.Write([]byte(trimName + " 退出了 "))

                        return

                }

                //写出来

                _, err = conn.Write([]byte(trimName + " says " + trimInput))

        }

}

//检查错误

func checkError(err error) {

        if err != nil {

                log.Fatal("an error!", err.Error())

        }

}

//主函数

func main() {

        //连接servser

        connectServer()

}

复制代码
执行 如图:


 

大家看开源工程的时候,特别是项目需要用到的时候,建议先网上找下;看下有没有对我们正在研究的开源项目的介绍,这样我们就可以少走些弯路,但是如果是只是想提高自己的技术水平,那就自己来一步一分析

首先,我们这节是研究通信机制,大家想想,通信模块是不是属于“底层”的,这个通讯模块一定是在作者的leaf包里吧,你可以自己去leaf的项目非包文件找,是找不到的吧‘

所以我们看源码,找到通信模块


 

找到之后,运行我们的leaf的server和我们刚写的client;发现原作者的日志只是简单的打印了错误;对我们的分析并没有任何用处,所以我们需要加个日志来调试我们的消息的数据;这个原开源的项目并不能想我们调试的项目随便加日志;但是调试的时候,特别是服务器开发,流水日志是处理问题的比不可少的;建议我们拿到开源项目,必要的流程日志还是需要我们自己加上,上线的时候可以屏蔽。

增加Glog日志,再main.go增加初始化函数和第三方日志库


 

加好后,我们就可以再之前的TCP网络库加上


 

之后我们运营leaf的server和我们的client,如图:


 


 

OK,今天的分析就暂时到这里;最后给大家几点忠告

1 拿到开源项目,我们的思路不要被原作者带着走;按照自己的编码习惯,按照的理解去测试。

2 平时开发中学会整理常用包,找个自己用的习惯的。例如这节我就用了GLOG库,并没有用原作者的,因为作者的日志并不是不好;而是日志打印的信息并不能很好定位我要找的数据;大家如果不信;可以试试,如果是在线上,很头疼的。

3 既然是开源项目;所以我们可以按照我们的理解和我们的测试结果去修改,修改到架构的最适合自己的;为我所用才是我们分析的目的

4 不管是leaf还是其他语言开发的游戏服务器,思想都是一样的,语言是工具谨记;

公众账号:Golang语言社区

社区微博:Golang语言社区

社区网址:www.Golang.Ltd

社区资源:www.Golang.MoM

社区直播:www.huya.com/golang

社区教育:www.NewTon.TV

我是彬哥,下节再见。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐