Golang 使用VSCode搭建一个简单的游戏服务器
2018-01-07 20:16
543 查看
环境:VSCode 语言:Go
总起:
当时在和Java服务器对接时,因为注册登录等操作不要求实时性,所以使用了http的方式(当然除了实时性以外,http无法做到全双工,当时Web大神跟我说他们以前做的时候使用websocket解决服务器向客户端发消息的问题)。
然后学了Photon的服务器,研究了一段时间,实现了登录和注册的功能。后来想用Golang,一直想着Java对应JavaWeb、C#对应Photon(或.net),那Golang对应的是什么?
今天上面的问题有了一定的解答,Golang它里面自身带的类库net、json、log就能完成服务器的功能,甚至提供了JavaWeb上类似js的模版功能,开发起来感觉非常轻量,环境分分钟就能弄好。
这篇文章首先介绍一下VSCode下Golang的搭建,然后介绍一个简单的登录注册服务器。
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的一个简单游戏服务器:
让我们来看看我写的简单服务器:
好的,让我们在Unity中试试效果:
这样就行了,Golang上的开发是不是很方便呢?
总起:
当时在和Java服务器对接时,因为注册登录等操作不要求实时性,所以使用了http的方式(当然除了实时性以外,http无法做到全双工,当时Web大神跟我说他们以前做的时候使用websocket解决服务器向客户端发消息的问题)。
然后学了Photon的服务器,研究了一段时间,实现了登录和注册的功能。后来想用Golang,一直想着Java对应JavaWeb、C#对应Photon(或.net),那Golang对应的是什么?
今天上面的问题有了一定的解答,Golang它里面自身带的类库net、json、log就能完成服务器的功能,甚至提供了JavaWeb上类似js的模版功能,开发起来感觉非常轻量,环境分分钟就能弄好。
这篇文章首先介绍一下VSCode下Golang的搭建,然后介绍一个简单的登录注册服务器。
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上的开发是不是很方便呢?
相关文章推荐
- 使用nodejs搭建一个简单的web服务器
- DNS浅析-Bind软件的使用及搭建一个简单的DNS缓存服务器
- 使用express搭建一个简单的查询服务器的方法
- [入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境
- 使用node.js搭建一个简单的本地服务器
- (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分
- (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分
- 使用libevent和boost编写一个简单的tcp服务器
- 使用zendframework 1.8搭建一个简单的网站构架
- 使用 Log4j 搭建一个日志服务器
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- DNS服务器概念的简单的介绍,与搭建一个简单的DNS名称缓存服务器,实现域名解析(一)
- 一个简单的游戏服务器框架
- (译)如何使用GameCenter制作一个简单的多人游戏教程:第二部分
- 使用C# socket 简单构架一个web服务器
- 本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏
- 使用ATL编写一个简单的COM服务器
- 一个简单的游戏服务器框架
- 使用libevent写的一个简单服务器的代码