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");

组件依赖