[TOC]

Socket

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

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

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

如何使用

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

var socketManager = App.Make();

通过NSP构建

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

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

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

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

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

获取已经构建完成的Socket

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

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

建立链接

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

var waitStatus = tcpSocket.Connect();

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

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

监听Socket消息

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

能够被监听的消息有:

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

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

触发外部定义的Socket事件

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

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

发送数据

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

var sendData = System.Text.Encoding.Default.GetBytes("hello world");

断开Socket链接

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

tcpSocket.Disconnect();

从管理器中释放Socket

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

socketManager.Release("default-tcp");

拓展Socket

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

socketManager.Extend(()=>{
var kcpSocket = socketManager.Get("my-kcp");

组件依赖

  • 时钟