`
444878909
  • 浏览: 641952 次
文章分类
社区版块
存档分类
最新评论

游戏平台账号认证网关的实现

 
阅读更多

账号认证网关,指的是对外提供账号认证服务的应用接口。本质上是一个进程,基于某种特定协议(如HTTP协议),接收账号认证请求,通过查询账号数据库验证账号是否正确,然后返回验证结果。

写这篇文章,主要是继续补充“游戏平台架构 账号篇”的内容。如果到这里还看不明白的童鞋不妨先看看前面写的这篇文章。

账号认证网关的实现,主要有以下几个技术点:

1、作为服务端进程,接收并处理请求

2、长连接数据库,查询账号是否正确

3、缓存查询过的账号,减少重复的查询


第一点,服务端进程

我们先对前面两点做一下分析,服务端进程需要24小时监听并处理请求,而且获取请求传过来的账号信息,并进行数据库查询,将结果告知请求。

这一来一回的过程,本质就是服务端socket与客户端socket通信的过程,从监听(listen),到接受请求(accept),到接收数据(recv),然后传输数据(send),最后关闭连接的过程。

这里还有一个需要注意的问题,如何去约定传递的数据格式?哪部分内容代表账号?哪部分内容又代表什么?所以我们在通讯时服务端和客户端都会事先协议好。

为了提高开发效率,同时也使我们能集中精力去处理业务,我选用了相对成熟的libevent,而且还可以跨平台,方便以后系统迁移,通讯协议则选HTTP。

libevent是一个异步事件触发的网络库,适用于windows、linux、bsd等多种平台。libevent提供了一系列应用程序编程接口,让开发者可以设定某些事件发生时所执行的函数,也就是说,libevent实现了对系统底层网络处理的封装,使得开发者可以更简单方便的处理网络事件。

HTTP协议是互联网上应用最为广泛的一种网络协议,是服务器端和客户端请求和应答的标准之一。

使用libevent 还有一个重要原因,她也实现了对HTTP的封装。这样我们就可以集中精力去处理业务代码了。

第二点,数据库查询

数据库查询其实没多少内容。到了做这个东西的时候,数据库已经决定好是什么类型了,所要做好的是如何去连接,去查询?

主要有以下几点:

1、最好使用长连接

2、考虑使用连接池,数据库查询相对内存读写是耗时的过程

3、对查询的内容做索引优化

第三点,缓存账号

账号要如何缓存,实现方式有很多种,简单介绍3种:

1、简单的,使用成熟的c++ map容器

2、 也不难,使用memcached作缓存

3、复杂的,两层结构,第一层用hash表,第二层用链表

剩下的就是具体的实现了,交给你自己了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics