Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yswenli/SAEA

SAEA.Socket is a high-performance IOCP framework TCP based on dotnet standard 2.0; Src contains its application test scenarios, such as websocket,rpc, redis driver, MVC WebAPI, lightweight message server, ultra large file transmission, etc. SAEA.Socket是一个高性能IOCP框架的 TCP,基于dotnet standard 2.0;Src中含有其应用测试场景,例如websocket、rpc、redis驱动、MVC WebAPI、轻量级消息服务器、超大文件传输等
https://github.com/yswenli/SAEA

chat high-performance iocp mqtt mvc mvc-webapi mvcwebapi queue redis redisclient rediscluster redisdrive rpc socket tcp webapi webserver websocket-client websocketclient websockets

Last synced: about 2 months ago
JSON representation

SAEA.Socket is a high-performance IOCP framework TCP based on dotnet standard 2.0; Src contains its application test scenarios, such as websocket,rpc, redis driver, MVC WebAPI, lightweight message server, ultra large file transmission, etc. SAEA.Socket是一个高性能IOCP框架的 TCP,基于dotnet standard 2.0;Src中含有其应用测试场景,例如websocket、rpc、redis驱动、MVC WebAPI、轻量级消息服务器、超大文件传输等

Awesome Lists containing this project

README

        

# ![Logo](/logo.jpg) SAEA.Socket

[![NuGet version (SAEA)](https://img.shields.io/nuget/v/SAEA.Sockets.svg?style=flat-square)](https://www.nuget.org/packages?q=saea)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)

SAEA.Socket Is an IOCP high-performance sockets network framework, based on dotnet standard 2.0; SRC contains its use scenarios, such as large file transfer, websocket client and server, high-performance message queue, RPC, redis driver, httpserver, mqtt, MVC, DNS, message server, etc

SAEA.Socket是一个IOCP高性能sockets网络框架,基于dotnet standard 2.0;Src中含有其使用场景,例如大文件传输、websocket client and server、高性能消息队列、rpc、redis驱动、httpserver、MQTT、Mvc、DNS、消息服务器等

QQ群:788260487

- [√] IOCP
- [√] FileTransfer
- [√] FTP
- [√] MessageSocket
- [√] QueueSocket
- [√] MVC
- [√] RPC
- [√] Websocket
- [√] RedisDrive
- [√] MQTT
- [√] DNS

## Reference component

引用组件,可以在nuget中搜索saea,或者直接输入命令
```
Install-Package SAEA.Sockets -Version 6.0.0.2
```
nuget url: https://www.nuget.org/packages?q=saea

------

# Example

## SAEA.Sockets for custom protocol

### JT808 protocol

The test project is SAEA. Sockets Test, which demonstrates how to extend IContext, IUnpacker decoding and encoding to access SAEA. Sockets by using tripartite protocol (JT808).
测试项目为SAEA.SocketsTest,其中演示了使用三方协议(JT808)来如何扩展IContext、IUnpacker解码、编码的方式接入SAEA.Sockets

## FileTransfer

### saea.filesocket usage

```csharp
var fileTransfer = new FileTransfer(filePath);
fileTransfer.OnReceiveEnd += _fileTransfer_OnReceiveEnd;
fileTransfer.OnDisplay += _fileTransfer_OnDisplay;
fileTransfer.Start();
//send file
fileTransfer.SendFile(string fileName, string ip)
```

## FTP

### saea.ftp usage

#### saea.ftpclient

```csharp
var client = new FTPClient(ip, port, username, pwd);
client.Ondisconnected += _client_Ondisconnected;
client.Connect();
var path = client.CurrentDir();
client.Upload(filePath, (o, c) =>
{
size = c;
_loadingUserControl.Message = $"正在上传文件:{fileName},{(o * 100 / c)}%";
});
client.Download(fileName, Path.Combine(filePath, fileName), (o, c) =>
{
_loadingUserControl.Message = $"正在下载文件:{fileName},{(o * 100 / c)}%";
});
```
#### saea.ftpserver

```csharp

_serverConfig.IP = ip;
_serverConfig.Port = port;
FTPServerConfigManager.Save();

var ftpServer = new FTPServer(_serverConfig.IP, _serverConfig.Port, _serverConfig.BufferSize);
ftpServer.OnLog += _ftpServer_OnLog;
ftpServer.Start();

```

## QueueTest

### saea.queue server usage

```csharp
var server = new QServer();
server.Start();
```
### saea.queue producer usage

```csharp
var ipPort = "127.0.0.1:39654";
QClient producer = new QClient("productor_" + Guid.NewGuid().ToString("N"), ipPort);
producer.OnError += Producer_OnError;
producer.OnDisconnected += Client_OnDisconnected;
producer.Connect();
producer.Publish(topic, msg);
```

### saea.queue consumer usage

```csharp
var ipPort = "127.0.0.1:39654";
QClient consumer = new QClient("subscriber_" + Guid.NewGuid().ToString("N"), ipPort);
consumer.OnMessage += Subscriber_OnMessage;
consumer.OnDisconnected += Client_OnDisconnected;
consumer.Connect();
consumer.Subscribe(topic);
```

## WebSocket
### wsserver usage

```csharp
WSServer server = new WSServer();
server.OnMessage += Server_OnMessage;
server.Start();

private static void Server_OnMessage(string id, WSProtocal data)
{
Console.WriteLine("WSServer 收到{0}的消息:{1}", ConsoleColor.Green, id, Encoding.UTF8.GetString(data.Content));
server.Reply(id, data);
}
```
### wsclient usage

```csharp
WSClient client = new WSClient();
client.OnPong += Client_OnPong;
client.OnMessage += Client_OnMessage;
client.OnError += Client_OnError;
client.OnDisconnected += Client_OnDisconnected;
client.Connect();
client.Send("hello world!");
client.Ping();
client.Close();
```

## RedisTest

https://github.com/yswenli/WebRedisManager

### saea.redis usage

```csharp
var cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
RedisClient redisClient = new RedisClient(cnnStr);
redisClient.Connect();
redisClient.GetDataBase(1).Set("key", "val");
var val = redisClient.GetDataBase().Get("key");
```

## SAEA.MVC

https://github.com/yswenli/SAEA.Rested

### saea.mvc init usage

```csharp

var mvcConfig = SAEAMvcApplicationConfigBuilder.Read();
SAEAMvcApplication mvcApplication = new SAEAMvcApplication(mvcConfig);
//设置默认控制器
mvcApplication.SetDefault("home", "index");
mvcApplication.SetDefault("index.html");
//限制
mvcApplication.SetForbiddenAccessList("/content/");
mvcApplication.SetForbiddenAccessList(".jpg");

mvcApplication.Start();
```

### saea.mvc controller usage

```csharp
[LogAtrribute]
public class HomeController : Controller
{
[Log2Atrribute]
[HttpGet]
[HttpPost]
public ActionResult Index()
{
return Content("Hello,I'm SAEA.MVC!你好!");
}

public ActionResult Show()
{
var response = HttpContext.Response;
response.ContentType = "text/html; charset=utf-8";
response.Write("

测试一下那个response对象使用情况!

参考消息网4月12日报道外媒称,法国一架“幻影-2000”战机意外地对本国一家工厂投下了炸弹。据俄罗斯卫星网4月12日援引法国蓝色电视台报道,事故于当地时间10日发生在卢瓦尔省,当时两架法国空军的飞机飞过韦尔尼松河畔诺让市镇上空,一枚炸弹从其中一架飞机上掉了下来,直接掉在了佛吉亚公司的工厂里。与此同时,有两人受伤。一名目击者称,“起初是两架战机飞过,然后我们都听到了物体撞击的声音,声音相当响,甚至盖过了飞过的飞机的噪音。”法国空军代表称,掉在工厂里的炸弹是演习用的,里面没有装炸药,本来是要将它投到离兰斯市不远的靶场。这名代表称事件“非常非常罕见”,目前正进行调查。");
response.End();
return Empty();
}

public ActionResult GetModels(string version, BasePamars basePamars, PagedPamars pagedPamars)
{
return Content($"version:{version} basePamars:{Serialize(basePamars)} pagedPamars:{Serialize(pagedPamars)}");
}

public ActionResult Download()
{
return File(HttpContext.Server.MapPath("/Content/Image/c984b2fb80aeca7b15eda8c004f2e0d4.jpg"));
}

[HttpPost]
public ActionResult Upload(string name)
{
var postFiles = HttpContext.Request.PostFiles;
return Content($"ok!name:{name}");
}
}
```

## SAEA.RPC
### saea.rpc service usage

```csharp
var sp = new ServiceProvider();
sp.OnErr += Sp_OnErr;
sp.Start();

[RPCService]
public class HelloService
{
public string Hello()
{
return "saea.rpc hello!"
}
}
```

### saea.rpc client usage

```csharp
var url = "rpc://127.0.0.1:39654";
RPCServiceProxy cp = new RPCServiceProxy(url);
cp.OnErr += Cp_OnErr;
cp.HelloService.Hello();
```

## SAEA.Message

### saea.message server usage

```csharp
MessageServer server = new MessageServer(1024, 1000 * 1000, 30 * 60 * 1000);

server.OnDisconnected += Server_OnDisconnected;

server.Start();
```

### saea.message client usage

```csharp
var cc1 = new MessageClient();
cc1.OnPrivateMessage += Client_OnPrivateMessage;
cc1.Connect();

//私信
cc1.SendPrivateMsg(cc2.UserToken.ID, "你好呀,cc2!");

//订阅
cc1.Subscribe(channelName);

//发送频道消息
cc1.SendChannelMsg(channelName, "hello!");

//创建群组
cc1.SendCreateGroup(groupName);

//加入群组
cc2.SendAddMember(groupName);

//发送群消息
cc1.SendGroupMessage(groupName, "群主广播了!");

//退群
cc2.SendRemoveGroup(groupName);

```

## SAEA.MQTT

### saea.mqtt server usage

```csharp
var serverOptions = new MqttServerOptionsBuilder().Build();

server.ApplicationMessageReceived += Server_ApplicationMessageReceived;

await server.StartAsync(serverOptions)

private static void Server_ApplicationMessageReceived(object sender, MQTT.Event.MqttMessageReceivedEventArgs e)
{
Console.ForegroundColor = ConsoleColor.DarkGreen;

Console.WriteLine($"Server收到消息,ClientId:{e.ClientId},{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
}
```
### saea.mqtt client usage

```csharp
var client = factory.CreateMqttClient();

var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1").Build();

client.ApplicationMessageReceived += Client_ApplicationMessageReceived;

await client.ConnectAsync(clientOptions);

client.SubscribeAsync("test/topic").GetAwaiter().GetResult();

client.PublishAsync("test/topic", "hello").GetAwaiter().GetResult();

private static void Client_ApplicationMessageReceived(object sender, MQTT.Event.MqttMessageReceivedEventArgs e)
{
Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine($"client:{e.ClientId}收到消息:{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
}

```

## Instance screenshot


















## More

WebRedisManager也是基于此的一款redis管理工具,具体可参见:https://www.cnblogs.com/yswenli/p/9460527.html git源码:https://github.com/yswenli/WebRedisManager

GFF一款仿QQ通信程序同样基于此,具体可参见:https://github.com/yswenli/GFF