使用GoLang开发游戏服务器(一)

实现最简单的服务器和客户端的通信

IServer

type IServer interface {Start()Stop()Serve()
}

server

type Server struct {Name      stringIpVersion stringIp        stringPort      int
}func (s *Server) Start() {go func() {addr, err := net.ResolveTCPAddr(s.IpVersion, fmt.Sprintf("%s:%d", s.Ip, s.Port))if err != nil {fmt.Println("Resolve TCP Address Error", err)return}listener, err := net.ListenTCP(s.IpVersion, addr)if err != nil {fmt.Println("Listen Error", err)return}fmt.Println("Server Start !")for true {conn, err := listener.Accept()if err != nil {fmt.Println("Account Error", err)continue}go func() {for true {buf := make([]byte, 512)count, err := conn.Read(buf)if err != nil {fmt.Println("Read Error", err)continue}fmt.Printf("客户端发来的数据:%s\n", buf[:count])if _, err := conn.Write(buf[:count]); err != nil {fmt.Println("Write Error", err)continue}}}()}}()
}func (s *Server) Stop() {}func (s *Server) Serve() {s.Start()//TODO:做一些服务器启动之后的额外业务select {}
}func NewServer(name string) ziface.IServer {s := &Server{Name:      name,IpVersion: "tcp4",Ip:        "192.168.0.4",Port:      8080,}return s
}

Dome的测试

Client和Server分别是Dome的客户端和服务端

  • Client
func main() {fmt.Println("Client Start...")time.Sleep(time.Second)conn, err := net.Dial("tcp", "106.13.203.64:8080")if err != nil {fmt.Println("Client Start Error", err)return}//创建子Goroutine去读取数据go func() {for true {buf := make([]byte, 512)count, err := conn.Read(buf)if err != nil {fmt.Println("Read Error...", err)return}fmt.Printf("Server Call Back: %s, count: %d\n", buf[:count], count)}}()//让主Goroutine阻塞,去写数据for true {str := ""fmt.Scanln(&str)_, err := conn.Write([]byte(str))if err != nil {fmt.Println("Write Error...", err)return}}
}
  • Server
func main() {s := znet.NewServer("[zinx v0.1] Server")s.Serve()
}

使用GoLang开发游戏服务器(一)相关推荐

  1. golang Leaf 游戏服务器框架简介

    Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架.Leaf 适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器. Leaf 的关注点: 良好的 ...

  2. golang游戏服务器项目,基于Golang的游戏服务器框架cellnet开发日记(一)

    启程的故事 使用Golang写服务器是一件非常幸福的事情. 不用长时间的等待编译, 零依赖部署. 开发效率高, 多出的时间陪陪家人, 看书充充电多好. 所以Golang就像是手机界的苹果, 从发布后, ...

  3. nodejs开发游戏服务器遇到的性能问题

    问题描述: 使用nodejs开发了一个游戏服务器,为了尽可能提高服务器的性能,服务器采用多进程的架构,前面处理玩家socket连接的是多个nodejs进程,使用 child_process 模块,服务 ...

  4. 游戏服务器框架php,golang -Pitaya 游戏服务器框架中文API教程

    golang -Pitaya 是一种简单.快速.轻量级游戏服务器和集群支持框架和客户端库iOS.Android,团结和其他人通过C SDK.它提供了一个基本的分布式多人游戏和服务器端应用程序开发框架. ...

  5. 如何缓解Golang大型游戏服务器的GC压力

    背景 Golang的垃圾回收器使用的是并行三色标记回收算法.该算法对比分代算法的最大问题就是,无法区分年轻代和老年代对象,如果老年代对象非常多的话,新生代对象的回收效率就会下降.如果程序没有减慢对象分 ...

  6. 游戏服务器引擎的设计(二)开发游戏服务器底层 及libuv使用

    服务器底层,个人任务认为稳定.高效.易用最重要.如果非要排个序的话 稳定 > 易用 > 高效. 我是用的libuv这个库作为基础支持库的.为啥用它,主要是网络库不想自己写了,有现成的最好. ...

  7. GoWorld – 用Golang写一个分布式可扩展、可热更的游戏服务器

    Golang具有运行效率高.内存安全等优良特性,因此是非常适合用来进行服务器开发.使用Golang开发游戏服务器有如下的优点: 运行效率远高于各种脚本语言,大幅度提升服务器承载能力 内存安全,不会像C ...

  8. 使用Golang开发手游服务器的感想

    从最初决定使用Golang开发游戏服务器(参考这里),到服务器基本成型,经过了两个多礼拜的时间.这里记录一下感想和心得.具体Golang的使用经验将来有时间会再开篇文章来写. 两个礼拜的时间,完成了G ...

  9. arduino nano 蓝牙_探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架...

    介绍 Nano 是什么? 轻量级,方便,高性能 golang 的游戏服务器框架. nano 是一个轻量级的服务器框架,它最适合的应用领域是网页游戏.社交游戏.移动游戏的服务端.当然还不仅仅是游戏,用  ...

  10. bigword游戏服务器文档,使用Golang实现万人同服的游戏服务器.pdf

    使用Golang实现万人同服的游戏服务器 游族·袁锋峰 目 录 C O N T E N T I N D E X 00. 游戏服务器开发面临的挑战 01. 服务器开发对语言的需求 10. 使用Golan ...

最新文章

  1. jquery dataTable的学习
  2. [leetcode]Pascal#39;s Triangle II
  3. 一个.NET Core下的开源插件框架Pluginfactory
  4. 对于 AttributeError: 'Series' object has no attribute 'sort'的解决办法
  5. 机器学习之几个好用的数据下载网站
  6. asp.net oracle 分页,asp.net教程之利用ASP实现Oracle数据记录的分页显示
  7. github git clone ssh协议 clone超慢解决方案,提高Github Clone速度
  8. 公式推导 11-22
  9. luvcview-0.2.4移植
  10. MySQL(6)-----数据类型
  11. FPGA零基础学习:SPI 协议驱动设计
  12. 浅谈车载支架无线充电方案
  13. Java-Poi导入导出excel工具类
  14. love2d教程28--血条
  15. 计算机夏令营英语面试,保研经验 | 夏令营面试那些事儿(内含视频)
  16. 红楼梦人物分析系统c语言,Gephi分析红楼梦
  17. java玫瑰花代码_玫瑰花(示例代码)
  18. TeamTalk Netlib详解
  19. #include<set>头文件的用法
  20. Wacom 数位板 和冠 手绘笔 Photoshop MacOS 延时卡顿丢笔解决办法

热门文章

  1. 邮政挂号信和包裹查询网站(非EMS)
  2. python常见算法实现_几种常见算法的Python实现
  3. JavaScript实现简单星星闪烁特效
  4. iOS之安装包优化以及瘦身
  5. TFP-161/100/6MM/6MM/MPU在红尘里,靠近菩提
  6. 哈希---平方探测法
  7. ACL-IJCNLP 2021-Sentiment Analysis相关论文整理
  8. 联想y9000x做java_联想Y9000X装win7系统及BIOS设置教程(支持9代)
  9. 获取ie窗口的IHTMLDocument2对象
  10. graphpad两组t检验_Graphpad Prism如何科学地选择统计学方法