1:个人邮件
一个邮件表(msg)
一个附件表(msg_attachment)
邮件中got字段表示客户端有没有拉取这封邮件。。
附件中got字段表示 当前奖励有没有被领取。。。
用户个人信息表中 用一个字段mail_receiveidx记录客户端已经拉取的最后一封邮件的id
客户端登陆后,定时请求邮件,把mail_receiveidx发送给客户端,客户端来拉取邮件时,把mail_receiveidx发送给服务器,由于第一次请求邮件信息时,服务器缓存中并没有当前uid的邮件信息,服务器去数据库检索mailid > mail_receiveidx 的邮件,sql上最好加上限制条数 例如 limit 10。。。。服务器把检索的结果发给客户端,并且把mail_receivedidx 修改成最新的值。。根据检索的结果,如果条数<10 表示数据库中已经没有新的邮件了,此时可以把玩家的邮件信息加入缓存。。如果条数>10 不加入缓存
再次拉取邮件时,就要检查缓存以及比较缓存中的msgid 和 mail_receivedidx ,如果有缓存且id相等就是说明 没有新邮件了,否则的话就把缓存清了 去数据库检索
系统给玩家发邮件时,先存mysql 然后通知玩家,如果玩家在线并且有缓存那就直接发送给玩家,更新msgid,否则的话 清空缓存 直接等客户端来拉
2:全服邮件
全服邮件表sys_msg 跟个人邮件表 类似 可以根据实际需求添加字段 如过期时间等等。。。。
用户个人信息表中 用一个字段sys_mail_receiveidx记录客户端已经存的最后一封全服邮件的id
客户端登陆时,服务器会去检查玩家有没有合格的全服邮件,如果有就向msg表以及 msg_attachment表中插入数据,同时更新sys_mail_receiveidx