查看: 184|回复: 1

棋牌游戏服务器架构: 详细设计(一) 内核设计(2)

[复制链接]

8

主题

36

帖子

220

积分

vip会员

Rank: 1

积分
220
发表于 2020-3-27 15:55:42 | 显示全部楼层 |阅读模式
3 TCPServerService详细设计

棋牌游戏服务器架构: 详细设计(一) 内核设计(2)

图5  TCPServerService结构图

      TCPServerService实现了IService接口和ITCPServerService接口。ITCPServerService的几个主要接口说明:

      1) SendData  通过指定的ISocketItem发送数据, 数据在一般情况下由4个参数: MainCmd, SubCmd, Data, DataSize (可以参与总休设计中关于协议的部分的描述) 。有的时候Data为空,就不需要Data和DataSize这两个参数了。

      2) SendDataBatch 给所有连接发送数据。这是批量发送的,所有连接池中对应的客户端都会收到。

      3) CloseSocket  关闭指定的连接。

      4) SetObserver 设置监听者。用以接收异步通知。

      TCPServerService 管理着一个客户端来的连接池。这个连接池由SocketItem组成,每一个SocketItem都与一个整数标识对应,Applications使用这个标识来发送数据和接收数据。SocketItem主要提供下面几个接口:

      1) GetIndex    获取与其对应的唯一标识

      2) GetRound   由于每个SocketItem都是可以重用的,所以为了防止混乱,比如说一个SocketItem在前一时刻对应着client1, 但是现在对应着client2。client1曾经的一个请求现在才要返回,这时如果没有GetRound就会把client1的处理结果错误地返回给client2。从这里也可以看出,每个SocketItem的round是在连接建立的时候会增加。

      3) IsConnected  是否处于连接状态。

      4) SendData  发送数据。

      5) GetClientAddress 得到客户端的IP地址

      6) GetConnectTimer 获取连接时间。

      7) Close  关闭连接。

      也许你会问了,我怎么只看到发送数据的接口,而没有接收数据的接口呢?因为这是个异步架构,在有连接到来,或者数据到来的时候,你会收到通知的。前提条件是你调用SetObserver设置了监听者。TCPServerService的监听都需要实现ITCPServiceObserver接口, TCPServerService通过这个接口提供的方法来通知你连接和读取事件:

      1) OnSocketAccept  在新连接到达时,会调用你这里面的内容。

      2) OnSocketRead  在数据读取完成后,会调用你提供的这个方法做进一步处理。

      3) OnSocketClose  告诉你连接将要关闭。

      需要注意的是如果你这三个方法中有共享的数据,要加锁保护。因为工作线程可能会产生竞争状态。

      和TimerService一样,TCPServerService的异步调度依赖于IAsyncService。


回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部