Socket

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

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

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

如何使用

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

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

通过NSP构建

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

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

{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函数的返回值,可能有以下几种状态的返回:

监听Socket消息

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

能够被监听的消息有:

tcpSocket.On(SocketEvents.Message , (data)=>
{
//todo:
});

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

触发外部定义的Socket事件

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

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

发送数据

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

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

断开Socket链接

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

tcpSocket.Disconnect();

从管理器中释放Socket

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

socketManager.Release("default-tcp");

拓展Socket

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

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

组件依赖