supersocke接收不到数据_SuperSocket源码解析之消息处理

本文详细介绍了SuperSocket中消息处理的流程,包括接收数据、原始过滤、协议解析、命令路由和执行。通过StartReceive方法启动接收,AppSession处理接收到的数据并进行协议解析。如果找不到命令处理消息,会将命令名回传给客户端。SuperSocket的框架允许自定义AppServer、AppSession、ReceiveFilter和命令,只需实现相应接口。
摘要由CSDN通过智能技术生成

一 简述

Tcp消息的处理本身是与Tcp消息传输过程独立的,是消息的两个不同阶段,从前面的会话生命周期我们已经知道消息的传输主要有SocketSession实现,而真正处理则交由AppSession实现,SuperSocket的层次划分也是非常清晰明了。

SuperSocket消息处理主要流程:接收=》原始过滤=》协议解析=》命令路由并执行=》找不到命令则直接一分不动发给客户端

二 消息接收

1 开始接收

代码位置:AsyncSocketSession=》StartReceive

1 private voidStartReceive(SocketAsyncEventArgs e)2 {3 StartReceive(e, 0);4 }5

6 private void StartReceive(SocketAsyncEventArgs e, intoffsetDelta)7 {8 bool willRaiseEvent = false;9

10 try

11 {12 if (offsetDelta < 0 || offsetDelta >=Config.ReceiveBufferSize)13 throw new ArgumentException(string.Format("Illigal offsetDelta: {0}", offsetDelta), "offsetDelta");14

15 var predictOffset = SocketAsyncProxy.OrigOffset +offsetDelta;16

17 if (e.Offset !=predictOffset)18 {19 e.SetBuffer(predictOffset, Config.ReceiveBufferSize -offsetDelta);20 }21

22 if(IsInClosingOrClosed)23 return;24

25 OnReceiveStarted();26 willRaiseEvent =Client.ReceiveAsync(e);27 }28 catch(Exception exc)29 {30 LogError(exc);31

32 OnReceiveError(CloseReason.SocketError);33 return;34 }35

36 if (!willRa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值