聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

一个适用于腾讯开放平台的 tunnel

2014-06-12 00:40 浏览: 6370 次 我要评论(0 条) 字号:

目前如果要与腾讯合作运营游戏的话,是必须把服务器运行在腾讯的云平台上的。鉴于腾讯的强势地位,严禁自己托管机器,也禁止选择别家的云服务。至于腾讯开放平台,谁用谁知道,呵呵。既然都叫”开放“了,你就能想像是什么意思了,所谓共和国还要在名字前加个 “人民” 呢 :)

如果你把 “必须运营在腾讯云平台” 这条当成企鹅税来看待,也就了然了。无非是多花点钱用差点的硬件,增加点程序员人工为它写些代码适配,出点啥莫名其妙的问题,忍忍,多吐点槽就好了。要理解大公司部门多,各个部门都需要完成自己的 KPI ,刷点存在感。

当然也有可能你的程序无法获得需要的处理能力,或是你不堪忍受在云平台上的各种奇葩。那么还有一条路可以偷偷走。那就是想办法自己另外托管机器,然后写一个 tunnel 程序把服务器连起来。

鉴于腾讯开放平台的开放性,普通现成的 tunnel 程序可能满足不了需求。晓靖同学最近在学 go 语言兴致比较高,用 go 实现了一个。需要的同学可以自取

这个东西完成了这样的功能:

你可以在开放平台下运行一份 gate ,监听一个端口。用户可以通过这个端口请求你提供的服务。

由于你可能没有权限从开放平台向外网发出连接。所以 gate 还需要再监听另一个端口,让你的服务器可以从外部连接进去。

然后,你在你的服务器这边(可能是你自己另外托管的机器上,也可以直接是你家里或办公室里的机器)启动一份 node 连接上放在开放平台中的 gate 。连接建立后,node 会把用户对 gate 的所有请求都转换成本地请求,你的服务器只需要启动在和 node 同一台机器上,就能处理它们了。

由于开放平台 tgw 的某种奇葩设计,从外部连入的 tcp 连接都会多出一个莫名其妙的包头 。自然你不希望看见它。gotunnel 这个服务会很贴心的帮你去掉它们。

当然,使用 tunnel 会使得所有用户的数据流都需要绕道几次才能辗转抵达你的真正服务器,所以单纯的请求回应测试会看到性能下降不少。但是长期总吞吐量是不变的。必须中间仅仅是做了包转发的工作,并没有降低你的服务器的处理能力。

采用这个方案,你可以大大节省在腾讯运营游戏的成本(可以用更经济的硬件,更少的维护成本,不需要为了开放平台改写你的程序),又可以满足开放平台的 KPI ,满足腾讯各个部门的存在感,最终用户也能得到更好的游戏体验。获得一个三赢的局面。



网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复