• Socket
    • 如何使用
    • 通过NSP构建
    • 获取已经构建完成的Socket
    • 建立链接
    • 监听Socket消息
    • 触发外部定义的Socket事件
    • 发送数据
    • 断开Socket链接
    • 从管理器中释放Socket
    • 拓展Socket
    • 组件依赖

    Socket

    实验中的组件,尚未完成测试及开发,请谨慎使用。

    Socket组件为您封装了一些常用的网络连接器,如:TCPKCPWebSocket(即将到来)等。

    这是一个底层网络组件您应该使用 网络组件 来管理您的网络链接,除非您对这个组件非常的了解。

    如何使用

    通过ISocketManager接口获取Socket管理器,Socket管理器可以用于管理活动的Socket。

    1. var socketManager = App.Make<ISocketManager>();

    通过NSP构建

    通过向Socket管理器的Make方法传入NSP(网络服务提供商)来构建出Socket。

    Socket组件已经为您定义好了以下NSP:

    • tcp://{host}:{port}
    • kcp://{conv}@{host}:{port}

    {host} : 服务器Host
    {port} : 服务器端口号
    {conv} : 会话Id(uint)(部分协议可能需要如:kcp)

    1. var tcpSocket = socketManager.Make("tcp://127.0.0.1:7777","default-tcp");

    获取已经构建完成的Socket

    通过Get方法,传入一个name来获取一个已经被完成构建的Socket

    1. var tcpSocket = socketManager.Get("default-tcp");

    建立链接

    您可以通过Connect方法发起链接,Connect方法是一个异步方法,但返回一个IAWait接口可以被用于同步等待完成。

    1. var waitStatus = tcpSocket.Connect();

    IAwait作为Connect函数的返回值,可能有以下几种状态的返回:

    • IsDoneTrue意味着内部执行状态终止(可能由于链接完成,但也可能由于异常)
    • Result布尔值且为True代表函数执行成功
    • ResultException类型,意味着在执行过程中出现了异常。

    监听Socket消息

    您可以通过On方法来监听Socket通讯消息。

    能够被监听的消息有:

    • SocketEvents.Connect : 当链接成功时(载荷为:自身连接器实例)
    • SocketEvents.Disconnect : 当主动引发断开连接时(载荷为:自身连接器实例)
    • SocketEvents.Message : 当收到网络消息时(载荷为:网络数据byte[],可能不是接受完全的)
    • SocketEvents.Sent : 当数据发送完成时(载荷为:自身连接器实例)。
    • SocketEvents.Closed : 当连接器关闭时(载荷为:自身连接器实例)。
    • SocketEvents.Error : 当连接器出现异常时(载荷为:Exception)
    1. tcpSocket.On(SocketEvents.Message , (data)=>
    2. {
    3. //todo:
    4. });

    通过Off可以对监听的消息进行释放。

    触发外部定义的Socket事件

    通过Trigger可以主动触发Socket事件。

    1. tcpSocket.Trigger("Your Events", "hello world");

    发送数据

    可以通过Send方法来向服务器发送一条数据,Send返回一个IAwait可以用于同步等待发送完成。

    1. var sendData = System.Text.Encoding.Default.GetBytes("hello world");
    2. var wait = tcpSocket.Send(sendData);

    断开Socket链接

    您可以通过Disconnect方法断开Socket链接。

    1. tcpSocket.Disconnect();

    从管理器中释放Socket

    您可以通过Release方法从管理器中释放链接,释放链接时如果没有断开Socket链接,那么会自动断开。

    1. socketManager.Release("default-tcp");

    拓展Socket

    您可以通过Extend方法来定制自己的Socket。

    1. socketManager.Extend(()=>{
    2. return new KcpConnector(91828,"127.0.0.1" , 7777){
    3. SendWindow = 256,
    4. RecvWindow = 128,
    5. NoDelay = true,
    6. IntervalTimer = 10,
    7. Resend = 1,
    8. CongestionControl = true
    9. };
    10. }, "my-kcp");
    1. var kcpSocket = socketManager.Get("my-kcp");

    组件依赖

    • 时钟