彬哥Go语言笔记Golang语言社区

彬哥笔记 --15 Go语言 游戏服务器网络 如何处理?

2018-12-31  本文已影响37人  Golang语言社区

      大家好,我是彬哥,本节给大家讲下go语言服务器游戏网络处理相关,抛砖引玉了,主要是针对Go语言游戏服务器开发网络连接如何处理。

首选我们来看下LollipopGo v1.0.20181225 版本的处理,代码如下:

NetBase.go
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


Golang语言社区
上一篇下一篇

猜你喜欢

热点阅读