Unity学习笔记——web服务器交互
使用HTTP协议进行网络协议,实现弱联网功能(排行榜等)
教程使用的方案是apache+php作为web服务器,unity客户端
在实际学习过程中使用的是GO语言,仅需一个http的库即可部署本地web服务器,虽然大体上的逻辑和教程一致,但因go和php的差异,在使用过程中还是有些问题,记录一下
- go的web部署
引入"net/http"包,使用如下代码监听本地端口,并指定不同路径的处理器
http.Handle("/", http.FileServer(http.Dir(dirRoot))) http.HandleFunc("/test", testHandler) http.HandleFunc("/score", scoreHandler) err := http.ListenAndServe(":8080", nil)
- 上述方法使用的是默认的路由DefaultMux,也可以自己定义ServeMux如下代码
mux := http.NewServeMux() // 创建一个 ServeMux
mux.Handle("/", http.HandlerFunc(handler))
mux.Handle("/time", http.HandlerFunc(testHandler))
err := http.ListenAndServe(":8080", mux)
- 对应的处理器方法具有func(w http.ResponseWriter, r *http.Requests)结构,处理requests并形成response,例如使用r.ParseForm()后获取request数据,然后使用r.Form["name"]获取传入的数据;使用w.Write([]byte(resp))返回response,即可实现基础的web交互。
- go的其他包与特性
- fmt和log,常用的输出库和日志库,fmt的多种print方法控制多种输出模式,log打印日志自带时间戳等
- io和os,io库和操作系统交互库,使用时查阅api即可
err,GO的一个特性,通常用如下代码来处理错误,以及封装到方法中使用,较为繁琐
file, _, err := r.FormFile("picture") if err != nil { fmt.Println("inovke FormFile error:", err) return } database, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/scores") checkErr(err) func checkErr(err error) { if err != nil { panic(err) } }
- 包版本管理,为避免使用的引用库版本冲突,需要使用go mod init初始化包版本
- 包下载,需要稳定的github访问网络环境以及git环境
- Unity的WWW类替换为UnityWebRequest类
- 在教程中使用的是已过时的WWW类进行客户端HTTP访问,Unity在新版本中使用UnityWebRequest类,经过使用感觉原先的类方法比较通俗,新的类方法更加严谨一些,都需要仔细查看api说明后使用