Golang 使用VSCode搭建一个简单的游戏服务器

环境:VSCode 语言:Go

总起:

当时在和Java服务器对接时,因为注册登录等操作不要求实时性,所以使用了http的方式(当然除了实时性以外,http无法做到全双工,当时Web大神跟我说他们以前做的时候使用websocket解决服务器向客户端发消息的问题)。

然后学了Photon的服务器,研究了一段时间,实现了登录和注册的功能。后来想用Golang,一直想着Java对应JavaWeb、C#对应Photon(或.net),那Golang对应的是什么?

今天上面的问题有了一定的解答,Golang它里面自身带的类库net、json、log就能完成服务器的功能,甚至提供了JavaWeb上类似js的模版功能,开发起来感觉非常轻量,环境分分钟就能弄好。

这篇文章首先介绍一下VSCode下Golang的搭建,然后介绍一个简单的登录注册服务器。

扫描二维码关注公众号,回复: 1879486 查看本文章

VSCode下Golang环境搭建:

学到现在Golang环境换了3个,现在用上了VSCode,不过用下来个人还是比较推荐VSCode的,闲话不多说,我们来看看怎么搭建Golang环境。

如果基本的Golang语言基础环境还没有搭建的同学,请看这边

首先VSCode在下载插件时需要git命令,请到该地址下载安装:http://gitforwindows.org/

然后是VSCode的下载:https://code.visualstudio.com/download

都安装完之后打开VSCode,点击右侧的扩展按钮,然后搜索Go:



我这边已经安装完了,没有安装的情况下应该是有个绿色的安装按钮。点击安装完成之后,ide自动提醒安装插件,点安装就行。

不过我有好几个插件没安装成功,照样还是能成功运行,所以应该少一些插件也无所谓吧。

这样就搭建完了,很方便吧。

然后想要运行某个go文件,其实就类似于在cmd中运行了。首先将文件拖入编辑器内,右键右侧的文件,点击在终端中打开就OK:



退出终端使用exit:



然后运行就和cmd中一样:



Golang的一个简单游戏服务器:

让我们来看看我写的简单服务器:

package main 

import(
    "net/http"
    "log"
    "encoding/json"
)

// 用户
type Account struct{
    Name string
    Password string
}

// 结果,注意首字母大写,不然json不能解析
type Result struct{
    OK bool
}

func main(){
    // 当前注册的所有用户
    accounts := make([]*Account, 0, 6)

    // register下的处理
    http.HandleFunc("/register", func(w http.ResponseWriter, r *http.Request){
        // 获取name和password
        name := r.FormValue("Name")
        pwd := r.FormValue("Password")

        // 判断内存内是否已经保存了该用户
        if HasAccountByName(accounts, name){
            ReturnResult(false, w)
        }else{
            // 没有该用户则存入
            accounts = append(accounts, &Account{
                Name : name,
                Password : pwd,
            })
            ReturnResult(true, w)
        }
})
// login下的处理
    http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request){
        // 获取name和password
        name := r.FormValue("Name")
        pwd := r.FormValue("Password")

        // 判断用户名密码是否匹配
        if IsAccountPwdMatch(accounts, name, pwd){
            ReturnResult(true, w)
        }else{
            ReturnResult(false, w)
        }
    })

    // 开启服务器
    log.Println("Server start!")
    log.Fatal(http.ListenAndServe(":4000", nil))
}

// 给客户端返回结果
func ReturnResult(result bool, w http.ResponseWriter){
    // 创建结果类
    re := &Result{
        OK : result,
    }

    // 使用json构造字符串
    j, _ := json.Marshal(re)

    // 发送给客户端
    w.Write([]byte(j))
}

// 根据名称判断是否有该用户
func HasAccountByName(as []*Account, name string) bool {
    for _, v := range as{
        if v.Name == name {
            return true
        }
    }
    return false;
}

// 根据名称和密码判断该用户是否匹配
func IsAccountPwdMatch(as []*Account, name string, password string) bool {
    for _, v := range as{
        if v.Name == name && v.Password == password {
            return true
        }
    }
    return false;
}

好的,让我们在Unity中试试效果:



这样就行了,Golang上的开发是不是很方便呢?


猜你喜欢

转载自blog.csdn.net/u012632851/article/details/78997020
今日推荐