SuperSocket教程十一:Core版本的SuperSocket中的几个基本概念

Package Type(包类型)
包类型代表从网络另一段收到的数据包的数据结构。

包类型 TextPackageInfo(SuperSocket.ProtoBase.TextPackageInfo,SuperSocket.ProtoBase) 是在 SuperSocket 中定义的最简单的数据包。它代表这类型的包仅包含一个字符串。

可以把包类型看成一种协议
那么最简单的协议 肯定是直接接受字符串 没有协议头和协议尾什么的
我们来看看有没有这么个接口

在这里插入图片描述

从这个实现进去
两个接口

在这里插入图片描述

这个接口

在这里插入图片描述

应该就算最简单的那个协议了 不做任何过滤
当然说到过滤 那么后面好像还真有这么个玩意

在这里插入图片描述

进到里面可以看到他是内置的写死了的
正对于StringPackageInfo这个包类型的一个过滤器
后面肯定是需要自己去实现的

有的包会有一个特殊的字段来代表此包内容的类型。我们将此字段命名为 “Key”。此字段也告诉我们用何种逻辑处理此类型的包。这是在网络应用程序中非常常见的一种设计。例如,你的 Key 字段是整数类型,你的包类型需要实现接口 IKeyedPackageInfo:

在这里插入图片描述

这个就实现了
superSocket1.6的时候我也讲过
为什么发送的时候是
ADD 1 2 \r\n
要进行隔开 因为服务器解析的时候会把他们先转换成数组
第一个是key 其余的是它需要的元素
这个后面再详谈

PipelineFilter Type
管道过滤类型
说白了解析协议的玩意

这种类型在网络协议解析中作用重要。它定义了如何将 IO 数据流解码成可以被应用程序理解的数据包。

这些是 PipelineFilter 的基本接口。你的系统中至少需要一个实现这个接口的 PipelineFilter 类型。
 

public interface IPipelineFilter
{
    void Reset();

    object Context { get; set; }        
}

public interface IPipelineFilter<TPackageInfo> : IPipelineFilter
    where TPackageInfo : class
{

    IPackageDecoder<TPackageInfo> Decoder { get; set; }

    TPackageInfo Filter(ref SequenceReader<byte> reader);

    IPipelineFilter<TPackageInfo> NextFilter { get; }

}

事实上,由于 SuperSocket 已经提供了一些内置的 PipelineFilter 模版,这些几乎可以覆盖 90% 的场景的模版极大的简化了你的开发工作。所以你不需要完全从头开始实现 PipelineFilter。即使这些内置的模版无法满足你的需求,完全自己实现PipelineFilter也不是难事。
CommandLinePipelineFilter (SuperSocket.ProtoBase.CommandLinePipelineFilter, SuperSocket.ProtoBase) 是在我们最常用的内置PipleFilter模版之一。我们将会在文档和示例代码中经常使用它。

使用 Package Type 和 PipelineFilter Type 创建 SuperSocket 宿主

在这里插入图片描述

介绍完不过是再介绍这里罢了
你定义好 Package 类型和 PipelineFilter 类型之后,你就可以使用 SuperSocketHostBuilder 创建 SuperSocket 宿主了。
在某些情况下,你可能需要实现接口 IPipelineFilterFactory 来完全控制 PipelineFilter 的创建。

public class MyFilterFactory : PipelineFilterFactoryBase<TextPackageInfo>
{
    protected override IPipelineFilter<TPackageInfo> CreateCore(object client)
    {
        return new FixedSizePipelineFilter(10);
    }
}

然后在 SuperSocket 宿主被创建出来之后启用这个 PipelineFilterFactory:

var host = SuperSocketHostBuilder.Create<StringPackageInfo>();
host.UsePipelineFilterFactory<MyFilterFactory>();


————————————————
版权声明:本文为CSDN博主「亮大大大」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38083655/article/details/111467231

https://blog.csdn.net/weixin_38083655/article/details/111467231

猜你喜欢

转载自blog.csdn.net/ba_wang_mao/article/details/114926650
今日推荐