« skynet 主题 T 恤 | 返回首页 | 重新设计并实现了 skynet 的 harbor 模块 »

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

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

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

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

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

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

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

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

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

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

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

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

Comments

@错了,应该是 Anonymous,
sorry mc

@mc
用腾讯平台是因为他的流量大,你要谈精神完全可以自己搞,看看有没有人登录你的游戏

腾讯开放平台,真的只能呵呵。

要持续维护哦

@Anonymous: 钱赚到就不叫贱,如果按别人规矩办事叫贱的话,你每天工作不就是拿脸去凑老板屁股?名字都不敢留还谈别人做人的精神真是笑话
-----------------------------
你要是tx的人, 或者和他们利益关系的话, 就当你是个屁了.

@Anonymous: 钱赚到就不叫贱,如果按别人规矩办事叫贱的话,你每天工作不就是拿脸去凑老板屁股?名字都不敢留还谈别人做人的精神真是笑话

别找腾讯运营不就行了,天下又不只它一家平台,哪用的着这么麻烦?中国就是多贱民,做人一点精神都没了。像腾讯这种恶霸就该联合抵制,但事实是大部分人都还想拿脸去凑他屁股,我对国人彻底失望了。

tunnel流量大大超过单独的客户端,腾讯应该有流量限制吧?

哈哈~

噗——!写的太逗了。

观望中。。。话说tx会采取对策么?搞得跟打外挂一样三天两头调整就麻烦了。

我当时在做腾讯接入的时候就有做这个的打算,后来因为时间比较赶,人手不足也就搁置了。

但是这个Tunnel只屏蔽了服务端对TGW的处理,但是对于客户端还是跑不掉要加TGW头。

一举多得啊,创造gdp,增加就业机会

Post a comment

非这个主题相关的留言请到:留言本