当前位置: 首页 > news >正文

从0到1制作一个go语言游戏服务器(二)web服务搭建

web服务搭建

  • web服务器搭建
    • 为什么要搭建web服务器
    • 构建web服务器
    • web服务器测试

web服务器搭建

为什么要搭建web服务器

我们这个项目的前后端交互用的是ws协议来进行通信 所以说我们需要处理http和websocket

至于我们为什么要用ws协议而补直接使用http呢?

因为http是一个无状态的连接 比如说我们再游戏中让我们的玩家移动n格 http协议可能就会发送n次连接请求 这样子效率就很差了

而ws协议的优势则在于建立连接之后可以直接双向通信 效率会高上不少

我们这里使用的ws协议是github上的 github.com/gorilla/websocket

构建web服务器

我们此时要创建一个web服务器的sever结构体

首先要想明白一个sever里面要有什么东西

  1. 首先肯定要有这个服务器的地址 包括ip + 端口 这样我们才能唯一的标识这个服
  2. 其次要有一个路由 每次客户端发送协议过来的时候我们会找到对应的路由上的处理器去执行

什么是路由 客户端发送的协议是什么格式的

路由就是根据url映射到一个路径处理器的机制

前端发送的协议是这样子的 {name :account.login}

其中这个 account.login 就是路由 account是路由的组 login是具体处理的函数名

一个路由可能有多个组 比如说账号组 游戏组等等

所以说路由的结构体如下

type group struct {prefix     stringhandlerMap map[string]HandlerFunc
}type Router struct {group []*group
}

这个时候我们开始继续写我们的websever服

server服的结构体是有一个地址(ip + port) 之后我们写一个new方法在main函数中new一个server服出来

type Server struct {Addr   stringrouter *Router
}func NewServer(addr string) *Server {return &Server{Addr: addr}
}

接着我们开始写server服的启动函

func (s *Server) Start() {http.HandleFunc("/", wsHandler)err := http.ListenAndServe(s.Addr, nil)if err != nil {log.Fatal(err)}
}

我们把接受到的所有消息都用 wsHandler 方法去处理 并且开始监听我们的地址 看看有没有协议发过来

下一步就是把http服务升级成 websocket服 这一步的代码是固定的

// 首先要把http协议升级成websocket协议
var wsUpgrader = websocket.Upgrader{// 允许所有CORS跨域请求CheckOrigin: func(r *http.Request) bool {return true},
}

在wshandler方法中 我们首先获取到一个ws连接

之后尝试用这个连接去发送一些消息

func wsHandler(w http.ResponseWriter, r *http.Request) {wsConn, err := wsUpgrader.Upgrade(w, r, nil)if err != nil {log.Fatal(err)}// 想一下 连接成功之后干什么?// 发消息是有格式的  所以说先要定义下消息的格式fmt.Println("开始发送消息")err = wsConn.WriteMessage(websocket.TextMessage, []byte("Hello, World!"))if err != nil {fmt.Println("发送消息失败", err)}
}

web服务器测试

我们上面的代码写完之后可以编写一个main函数再使用websocket在线测试工具进行测试

package mainimport ("STZB/config""STZB/net"
)func main() {host := config.File.MustValue("login_server", "host", "127.0.0.1")port := config.File.MustValue("login_server", "port", "8003")server := net.NewServer(host + ":" + port)server.Start()
}

在这里插入图片描述
接收到消息则说明我们的服务器搭建成功

http://www.dtcms.com/a/423928.html

相关文章:

  • 网站使用流程图昆明网站建设天锐科技
  • (uniapp)基于vue3父子组件间传递参数与方法
  • 铁岭开原网站建设高中课程免费教学网站
  • 高校网站群建设方案网站建设目录结构设计
  • 静态网站源码野花韩国视频在线观看免费高清
  • Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!
  • 杭州营销型网站建设杭州租车网站建设
  • 网站开发基础知识网站开发怎么连接sqlserver
  • 基于AC6366C做AI语音鼠标
  • 刘诗雯现身TCL品牌活动,雷鸟34Q9显示器同台竞技
  • 东莞百域网站建设公司手机网站开发屏幕尺寸一般是多少
  • 理财经理如何提高职场技能实现晋升
  • 【碎片化学习】SpringBoot中的自动配置(Auto Configuration)
  • PC16550 FIFO接收方式研究
  • 做基金的网站哪个好用什么程序做资讯类网站
  • 图书馆网站建设申请国外做仿牌网站
  • make, makefile, cmake, qmake 有何区别?
  • vite如何处理项目中的资源
  • 文网文网站建设wordpress只显示首页
  • sk07.【scikit-learn基础】--『监督学习』之支持向量机
  • 网站建设与管理好学吗打广告网站
  • 免费门户网站源码长春企业网站建设价格
  • 【APK安全】HTTPS证书校验的核心风险与防御指南
  • 小迪web自用笔记41
  • 国外网站国内做好还是国外做邹城住房城乡建设部网站
  • 预付做网站定金如何免费的网站模板哪里有
  • 黄金、白银、石油期货市场API对接文档
  • linux入门5.1(Nginx服务器)
  • Hadess入门到实战(5) - 如何管理通用Generic制品
  • 丰台手机网站建设2023年新闻摘抄