连接Proxy服务器成功
上一节链接登录服务器成功,通过登录服务器获取到token数据;token数据的作用是通过websocket在游戏服务器验证合法性;本节实现的是客户端链接代理服务器成功,主要思路是客户单通过代理Proxy服务器访问内网游戏服务器。
截图如下:
部分核心代码:
// 连接代理服务器
func ConnProxy(ProxyUrl, Token string) {
glog.Info("data----------游戏服务器ID::", util.MD5_LollipopGO(strconv.Itoa(twlib_server.GameServerId)))
proxyURL := AddParamsToGetReq("ws", []string{ProxyUrl[5:] + "/BaBaLiuLiu"}, map[string]string{"data": "{ID:1}"})
glog.Infof("connect to proxy addr:%s\n", proxyURL)
conn, err := websocket.Dial(proxyURL, "", "test://golang/")
if err != nil {
glog.Errorln("err:", err.Error())
return
}
ConnClient = conn
if ConnClient != nil {
glog.Info("----链接服务器成功!")
}
// 组合数据发送到
data := Proto_Proxy.G2Proxy_ConnData{
Protocol: twlib_proto.GameDataProto,
Protocol2: Proto_Proxy.G2Proxy_ConnDataProto, ServerID: util.MD5_LollipopGO(strconv.Itoa(twlib_server.GameServerId +)), // 注册服务器的ID
}
impl.PlayerSendToServer(conn, data)
go GameServerReceive(conn)
}
func GameServerReceive(ws *websocket.Conn) {
defer func() {
if err := recover(); err != nil {
glog.Errorln(fmt.Sprintf("ERROR:[%s]\nSTACK:[%s\n]", err, string(debug.Stack())))
}
}()
glog.Info("----GameServerReceive!")
for {
var content string
err := websocket.Message.Receive(ws, &content)
if err != nil {
continue
}
if len(content) == 0 {
continue
}
content = strings.Replace(content, "\"", "", -1)
contentstr, errr := base64Decode([]byte(content))
if errr != nil {
glog.Errorln(errr)
continue
}
glog.Info("收到数据:", string(contentstr))
SyncMessageFun(string(contentstr))
}
}
主要是编程逻辑和思路,编码是比较简单的事情;本节主要是解决EbitEn的客户端连接到代理Proxy服务器的基础逻辑。大家主要能借鉴就可以借鉴下;了解整个架构的设计是主要的。
下节我们主要解决:EbitEn的客户端通过代理服务器链接内网游戏服务器。
本节就暂时到这里,明天继续EbitEngine编程。代码比较简单,不明白的可以留言。
社区自己开发的IO小游戏,欢迎体验:
同学们,兴趣是最好的老师;只争朝夕,不负韶华!加油!
参考资料:
Go语言中文文档
http://www.golang.ltd/
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有