大家好,我是彬哥,本节给大家讲下go语言服务器游戏网络处理相关,抛砖引玉了,主要是针对Go语言游戏服务器开发网络连接如何处理。
首选我们来看下LollipopGo v1.0.20181225 版本的处理,代码如下:
package main
import (
"encoding/json"
"fmt"
"Proto"
"Proto/Proto2"
"code.google.com/p/go.net/websocket"
)
func wwwGolangLtd(ws *websocket.Conn) {
data := ws.Request().URL.Query().Get("data")
NetDataConntmp := &NetDataConn{
Connection: ws,
StrMd5: "",
MapSafe: M,
MapSafeServer: MServer,
}
NetDataConntmp.PullFromClient()
}
NetCtl.go 处理 如下:
func (this *NetDataConn) PullFromClient() {
for {
var content string
if err := websocket.Message.Receive(this.Connection, &content); err != nil {
break
}
if len(content) == 0 || len(content) >= 4096 {
break
}
go this.SyncMeassgeFun(content)
}
}
大家从代码结构上完全可以看出,LollipopGo架构的网络处理是一个请求一个goroutine;而并没有像其他Go游戏服务器框架或者传统的c++游戏框架一个发送进程、一个接受进程;首先从语言的特性按照自己的需求来做是最好的,同时Go语言的语言特性及Go语言的网络底层实现希望初学go语言的同学可以了解下。
每天坚持学习1小时Go语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!
社区交流群:221273219
Golang语言社区论坛 :
www.Golang.Ltd
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclass
有疑问加站长微信联系(非本文作者)