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

leaf开源游戏服务器源码
leaf开源服务器第一节-分析项目结构
leaf开源服务器第二节-分析之配置文件说明及服务器运行

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

client代码;
  1. import (
  2.         "bufio"
  3.         "fmt"
  4.         "log"
  5.         "net"
  6.         "os"
  7.         "strings"
  8. )

  9. //连接服务器
  10. func connectServer() {
  11.         //接通
  12.         conn, err := net.Dial("tcp", "localhost:8888")
  13.         checkError(err)
  14.         fmt.Println("连接成功!\n")
  15.         //输入
  16.         inputReader := bufio.NewReader(os.Stdin)
  17.         fmt.Println("你是谁?")
  18.         name, _ := inputReader.ReadString('\n')
  19.         //
  20.         trimName := strings.Trim(name, "\r\n")
  21.         conn.Write([]byte(trimName + " 接入了\n "))
  22.         for {
  23.                 fmt.Println("我们来聊天吧!按quit退出")
  24.                 //读一行
  25.                 input, _ := inputReader.ReadString('\n')
  26.                 trimInput := strings.Trim(input, "\r\n")
  27.                 //如果quit就退出
  28.                 if trimInput == "quit" {
  29.                         fmt.Println("再见")
  30.                         conn.Write([]byte(trimName + " 退出了 "))
  31.                         return
  32.                 }
  33.                 //写出来
  34.                 _, err = conn.Write([]byte(trimName + " says " + trimInput))
  35.         }
  36. }

  37. //检查错误
  38. func checkError(err error) {
  39.         if err != nil {
  40.                 log.Fatal("an error!", err.Error())
  41.         }
  42. }

  43. //主函数
  44. func main() {
  45.         //连接servser
  46.         connectServer()
  47. }
复制代码
执行 如图:
6.png 

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

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

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

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

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

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

7.png 

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

2.png 

OK,今天的分析就暂时到这里;最后给大家几点忠告
1 拿到开源项目,我们的思路不要被原作者带着走;按照自己的编码习惯,按照的理解去测试。
2 平时开发中学会整理常用包,找个自己用的习惯的。例如这节我就用了GLOG库,并没有用原作者的,因为作者的日志并不是不好;而是日志打印的信息并不能很好定位我要找的数据;大家如果不信;可以试试,如果是在线上,很头疼的。
3 既然是开源项目;所以我们可以按照我们的理解和我们的测试结果去修改,修改到架构的最适合自己的;为我所用才是我们分析的目的
4 不管是leaf还是其他语言开发的游戏服务器,思想都是一样的,语言是工具谨记;


公众账号:Golang语言社区
社区微博:Golang语言社区
社区网址:www.Golang.Ltd
社区资源:www.Golang.MoM
社区直播:www.huya.com/golang
社区教育:www.NewTon.TV

我是彬哥,下节再见。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值