网游网络层简述

编号项按层从下到上。

网络

1.native api:socket, select, iocp, epoll

2.网络库:ACE, BOOST.ASIO, LIBEVENT


消息&序列化

有些方案是序列化和RPC一起提供的,比如FB的thrift。

3.消息中间件(以下为不同方案,非分层。):

消息:一般来说都是异步的。

直接发消息:不是用中间件,接收消息的只做一个消息缓存队列。自己解析消息,调用对应的函数。返回值也通过发一个消息给客户端实现。

消息队列:使用通用的MQ协议如AMQP,或库如zeromq。个人感觉MQ的很多特性游戏用不到:确保信息传输并且是一次且仅一次(once-and-only-once)的传递,这个是指消费者挂了重启后还可以从MQ中读取消息,但是游戏的各个服是有状态的(各种玩家信息),挂了重启后这些信息没了,有消息也没用,这个特性只有无状态的或能保存状态的消费者才有用。MQ还可以加一层适配器,目前只了解到STOMP,还不知道有何用以及在MQ之上还是之下。

传统的MQ如RabbitMQ、ActiveMQ等都有消息中间件,启动第三方服务进程。而ZMQ就应用程序端点扮演了这个服务角色,原理和其它几种差别太大了。其实和上面的直接发消息也差不了多少,只是提供更多模式选择。

"对于网络游戏,我觉得基于 ZeroMQ 来架构服务器非常合适。对于玩家 Client - Server 部分倒不必使用 ZeroMQ ,而可以写一个前端程序,比如前些年写过的一篇 blog 中提到的连接服务器依然适用。这个连接服务器对内的服务集群则可以用 ZeroMQ 的协议通讯"ZeroMQ 的模式

RPC:(调研还不是很仔细)本地调用远程函数的方式,而非发消息了。每个RPC本质上还是一个消息,所以个人感觉可以基于MQ实现,也就是可以在MQ层之上。但是MQNewer  把RPC和MQ做为两种并列的消息中间件。

同步RPC:初接触的RPC都是这种,效率低,游戏服务端应该不会用的。

不需要返回值的异步RPC:就等于直接发消息了。

异步RPC:配合coroutin可以实现异步RPC,这种应该是最完美的。

4.序列化: protobuf, amf  这个算不上分层,最上的应用是将发送的包先经过序列化后才放入mq中。




我要啦免费统计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值