Skip to content
yswenliPublic

About

SAEA.Socket is a zero-copy, high-performance sockets network framework built on IOCP and targeting .NET Standard 2.0. The source code (Src) includes demo use cases such as P2P, SOCKS5, WebSocket client and server, message queue, RPC, Redis driver, HTTP server, MQTT, MVC, DNS, message server, and more.

Topics

Resources

Stars

425 stars

Watchers

35 watching

Forks

Latest commit

ย 

History

1,010 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Logo SAEA - ้ซ˜ๆ€ง่ƒฝ็ฝ‘็ปœ้€šไฟกๆก†ๆžถๅฎถๆ— ๐Ÿš€

NuGet version (SAEA) License

English Version | ไธญๆ–‡็‰ˆ

ๅŸบไบŽ .NET Standard 2.0 ็š„้ซ˜ๆ€ง่ƒฝ IOCP ็ฝ‘็ปœ้€šไฟกๆก†ๆžถ๏ผŒๆ”ถๅ‘่ทฏๅพ„็ปŸไธ€ไธบ้›ถๆ‹ท่ด๏ผˆSpan/Memory๏ผ‰+ ๅ†…ๅญ˜ๆฑ ๅŒ–ๅค็”จ๏ผŒๆไพ›ๅฎŒๆ•ด็š„็ฝ‘็ปœๅบ”็”จ่งฃๅ†ณๆ–นๆกˆใ€‚

SAEA.Socket ๆ˜ฏไธ€ไธช IOCP ้ซ˜ๆ€ง่ƒฝ sockets ็ฝ‘็ปœๆก†ๆžถ๏ผŒSrc ไธญๅŒ…ๅซๅ…ถไฝฟ็”จๅœบๆ™ฏ๏ผŒไพ‹ๅฆ‚ๅคงๆ–‡ไปถไผ ่พ“ใ€WebSocket ๅฎขๆˆท็ซฏๅ’ŒๆœๅŠกๅ™จใ€้ซ˜ๆ€ง่ƒฝๆถˆๆฏ้˜Ÿๅˆ—ใ€RPCใ€Redis ้ฉฑๅŠจใ€HTTP Serverใ€MQTTใ€MVCใ€DNSใ€ๆถˆๆฏๆœๅŠกๅ™จ็ญ‰ใ€‚


ๅฟซ้€Ÿๅฏผ่ˆช ๐Ÿงญ

็ซ ่Š‚ ๅ†…ๅฎน
โšก 30็ง’ๅฟซ้€Ÿๅผ€ๅง‹ ๆœ€็ฎ€ๅ•็š„ไธŠๆ‰‹ๆ–นๅผ
๐Ÿงฉ ็ป„ไปถๅฏผ่ˆช ้€‰ๆ‹ฉๅˆ้€‚็š„็ป„ไปถ
๐Ÿ“ ้กน็›ฎๆžถๆž„ ๆ•ดไฝ“ๆžถๆž„่ฎพ่ฎก
โœจ ๆ ธๅฟƒ็‰นๆ€ง ไธป่ฆๅŠŸ่ƒฝไบฎ็‚น
๐Ÿ“Š ๆ€ง่ƒฝๅฏนๆฏ” ไธŽๅŒ็ฑปๆก†ๆžถๅฏนๆฏ”
โ“ ๅธธ่ง้—ฎ้ข˜ FAQ ๅฟซ้€Ÿ่งฃ็ญ”
๐Ÿ”— ่ต„ๆบ้“พๆŽฅ ๆ›ดๅคšๅญฆไน ่ต„ๆบ

30็ง’ๅฟซ้€Ÿๅผ€ๅง‹ โšก

ๆ–นๅผ 1: ๅฎ‰่ฃ…ๆ ธๅฟƒ Socket ๆก†ๆžถ

dotnet add package SAEA.Sockets
// ๅˆ›ๅปบ TCP ๆœๅŠกๅ™จ๏ผˆไป…้œ€5่กŒไปฃ็ ๏ผ‰
var server = SocketFactory.CreateServerSocket(
    SocketOptionBuilder.Instance.SetSocket(SAEASocketType.Tcp).UseIocp().SetPort(39654).Build()
);
server.OnServerReceiveSpan += (userToken, data) => server.Send(userToken.ID, data);
server.Start();

๐Ÿ’ก OnServerReceiveSpan ็š„ data ไธบ ReadOnlySpan<byte>๏ผŒไป…ๅœจๅ›ž่ฐƒๆœŸ้—ดๆœ‰ๆ•ˆ๏ผŒ่ฏทๅœจๅŒไธ€ๆฌกๅ›ž่ฐƒๅ†…ๅŒๆญฅๆถˆ่ดน๏ผˆๆˆ– ToArray() ๅคๅˆถ๏ผ‰ใ€‚

ๆ–นๅผ 2: ้€‰ๆ‹ฉ้€‚ๅˆไฝ ็š„็ป„ไปถ

ๆ นๆฎไฝ ็š„้œ€ๆฑ‚้€‰ๆ‹ฉๅฏนๅบ”็ป„ไปถ๏ผš

ไฝ ็š„้œ€ๆฑ‚ ๆŽจ่็ป„ไปถ ๅฎ‰่ฃ…ๅ‘ฝไปค
Web API ๅผ€ๅ‘ SAEA.MVC dotnet add package SAEA.MVC
WebSocket ๅฎžๆ—ถ้€šไฟก SAEA.WebSocket dotnet add package SAEA.WebSocket
P2P ็›ด่ฟž้€šไฟก SAEA.P2P dotnet add package SAEA.P2P
Redis ็ผ“ๅญ˜ๆ“ไฝœ SAEA.RedisSocket dotnet add package SAEA.RedisSocket
ๅพฎๆœๅŠก RPC SAEA.RPC dotnet add package SAEA.RPC
IoT ่ฎพๅค‡้€šไฟก SAEA.MQTT dotnet add package SAEA.MQTT
ๆ–‡ไปถไผ ่พ“ SAEA.FileSocket dotnet add package SAEA.FileSocket

็ป„ไปถๅฏผ่ˆช ๐Ÿงฉ

ๆ ธๅฟƒ็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐Ÿ”Œ SAEA.Sockets IOCP Socket ้€šไฟกๆก†ๆžถ NuGet ไธญๆ–‡ English ๆธธๆˆๆœๅŠกๅ™จใ€ๅฎžๆ—ถ้€šไฟกใ€IoT
๐Ÿ”ง SAEA.Common ้€š็”จๅทฅๅ…ท็ฑปๅบ“ NuGet ไธญๆ–‡ English ๅบๅˆ—ๅŒ–ใ€็ผ“ๅญ˜ใ€ๅŠ ๅฏ†

Web ๅบ”็”จ็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐ŸŒ SAEA.Http HTTP ๆœๅŠกๅ™จ NuGet ไธญๆ–‡ English RESTful APIใ€้™ๆ€ๆ–‡ไปถๆœๅŠก
๐ŸŽจ SAEA.MVC MVC Web ๆก†ๆžถ NuGet ไธญๆ–‡ English Web ๅบ”็”จใ€API ๆœๅŠก

ๅฎžๆ—ถ้€šไฟก็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐Ÿ’ฌ SAEA.WebSocket WebSocket ๆœๅŠกๅ™จ/ๅฎขๆˆท็ซฏ NuGet ไธญๆ–‡ English ๅฎžๆ—ถ่Šๅคฉใ€ๆŽจ้€้€š็Ÿฅ
๐Ÿค– SAEA.MQTT MQTT ๅ่ฎฎๅฎž็Žฐ NuGet ไธญๆ–‡ English IoT ่ฎพๅค‡ใ€ๆ™บ่ƒฝๅฎถๅฑ…
๐Ÿ“จ SAEA.MessageSocket ๆถˆๆฏๆœๅŠกๅ™จ NuGet ไธญๆ–‡ English ๅณๆ—ถ้€š่ฎฏใ€ๅœจ็บฟๅฎขๆœ

P2P ้€šไฟก็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐Ÿ”— SAEA.P2P P2P ็›ด่ฟž้€šไฟก็ป„ไปถ NuGet ไธญๆ–‡ English NAT ็ฉฟ้€ใ€ๅฑ€ๅŸŸ็ฝ‘ๅ‘็Žฐใ€ๅณๆ—ถ้€š่ฎฏใ€ๆธธๆˆๅฏนๆˆ˜

ๆ•ฐๆฎไธŽๅญ˜ๅ‚จ็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐Ÿ“ฆ SAEA.RedisSocket Redis ๅฎขๆˆท็ซฏ NuGet ไธญๆ–‡ English Redis ็ผ“ๅญ˜ใ€ๅˆ†ๅธƒๅผ้”
๐Ÿ“ SAEA.FileSocket ๆ–‡ไปถไผ ่พ“็ป„ไปถ NuGet ไธญๆ–‡ English ๅคงๆ–‡ไปถไผ ่พ“ใ€ๆ–ญ็‚น็ปญไผ 
๐Ÿ—‚๏ธ SAEA.FTP FTP ๆœๅŠกๅ™จ/ๅฎขๆˆท็ซฏ NuGet ไธญๆ–‡ English ๆ–‡ไปถๆœๅŠกๅ™จใ€FTP ๅฎขๆˆท็ซฏ

ๅˆ†ๅธƒๅผ็ณป็ปŸ็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐Ÿ”— SAEA.RPC RPC ่ฟœ็จ‹่ฐƒ็”จ NuGet ไธญๆ–‡ English ๅพฎๆœๅŠก้€šไฟกใ€่ฟœ็จ‹่ฐƒ็”จ
๐Ÿ“Š SAEA.QueueSocket ๅ†…ๅญ˜ๆถˆๆฏ้˜Ÿๅˆ— NuGet ไธญๆ–‡ English Pub/Subใ€ไบ‹ไปถ้€š็Ÿฅ

็ฝ‘็ปœๅทฅๅ…ท็ป„ไปถ

็ป„ไปถ ๅŠŸ่ƒฝ NuGet ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้€‚็”จๅœบๆ™ฏ
๐ŸŒ SAEA.DNS DNS ๆœๅŠกๅ™จ/ๅฎขๆˆท็ซฏ NuGet ไธญๆ–‡ English DNS ไปฃ็†ใ€ๅŸŸๅ่งฃๆž

้กน็›ฎๆžถๆž„ ๐Ÿ“

SAEA ็ป„ไปถๅฎถๆ—ๆžถๆž„ๅ›พ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    SAEA ็ป„ไปถๅฎถๆ—ๆžถๆž„ๆ€ป่งˆ                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                 โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๅบ”็”จๅฑ‚็ป„ไปถ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                     โ”‚
โ”‚   โ”‚                                       โ”‚                     โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚                     โ”‚
โ”‚   โ”‚  โ”‚  MVC    โ”‚  โ”‚ WebSocketโ”‚           โ”‚                     โ”‚
โ”‚   โ”‚  โ”‚(Webๆก†ๆžถ)โ”‚  โ”‚(ๅฎžๆ—ถ้€šไฟก)โ”‚           โ”‚                     โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚                     โ”‚
โ”‚   โ”‚       โ”‚            โ”‚                  โ”‚                     โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚                     โ”‚
โ”‚   โ”‚  โ”‚  RPC    โ”‚  โ”‚ MQTT   โ”‚  โ”‚ Message โ”‚โ”‚                     โ”‚
โ”‚   โ”‚  โ”‚(่ฟœ็จ‹่ฐƒ็”จ)โ”‚  โ”‚(IoT)  โ”‚  โ”‚ Socket  โ”‚โ”‚                     โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜โ”‚                     โ”‚
โ”‚   โ”‚       โ”‚           โ”‚            โ”‚      โ”‚                     โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”       โ”‚      โ”‚                     โ”‚
โ”‚   โ”‚  โ”‚  P2P    โ”‚  โ”‚ Redis  โ”‚       โ”‚      โ”‚                     โ”‚
โ”‚   โ”‚  โ”‚(NAT็ฉฟ้€)โ”‚  โ”‚(็ผ“ๅญ˜)  โ”‚       โ”‚      โ”‚                     โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜       โ”‚      โ”‚                     โ”‚
โ”‚   โ”‚       โ”‚           โ”‚            โ”‚      โ”‚                     โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”˜                     โ”‚
โ”‚             โ”‚           โ”‚            โ”‚                           โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”                   โ”‚
โ”‚   โ”‚           SAEA.Sockets (ๆ ธๅฟƒๅฑ‚)         โ”‚                   โ”‚
โ”‚   โ”‚        IOCP ้ซ˜ๆ€ง่ƒฝ Socket ๆก†ๆžถ          โ”‚                   โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚                   โ”‚
โ”‚   โ”‚  โ”‚IocpSocketโ”‚  โ”‚StreamSockโ”‚  โ”‚UdpSockโ”‚ โ”‚                   โ”‚
โ”‚   โ”‚  โ”‚ (IOCP)   โ”‚  โ”‚(ๆตๆจกๅผ)  โ”‚  โ”‚ (UDP) โ”‚ โ”‚                   โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚                   โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚                   โ”‚
โ”‚   โ”‚  โ”‚  BufferPool โ”‚ Session โ”‚  Coder   โ”‚ โ”‚                   โ”‚
โ”‚   โ”‚  โ”‚  (ๅ†…ๅญ˜ๆฑ )   โ”‚(ไผš่ฏ)  โ”‚(็ผ–่งฃ็ )  โ”‚ โ”‚                   โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚                   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                   โ”‚
โ”‚                      โ”‚                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                   โ”‚
โ”‚   โ”‚         SAEA.Common (ๅŸบ็ก€ๅฑ‚)           โ”‚                   โ”‚
โ”‚   โ”‚       ้€š็”จๅทฅๅ…ท็ฑปๅบ“ (ๅบๅˆ—ๅŒ–/็ผ“ๅญ˜/ๅŠ ๅฏ†)    โ”‚                   โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚                   โ”‚
โ”‚   โ”‚  โ”‚Serializeโ”‚  โ”‚ Cache โ”‚  โ”‚Encryptโ”‚   โ”‚                   โ”‚
โ”‚   โ”‚  โ”‚(ๅบๅˆ—ๅŒ–) โ”‚  โ”‚(็ผ“ๅญ˜) โ”‚  โ”‚(ๅŠ ๅฏ†) โ”‚   โ”‚                   โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚                   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                   โ”‚
โ”‚                                                                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ•ฐๆฎๆตๆžถๆž„ๅ›พ

ๅฎขๆˆท็ซฏ่ฏทๆฑ‚ๆต็จ‹:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๅฎขๆˆท็ซฏ  โ”‚โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ Sockets  โ”‚โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  Coder   โ”‚
โ”‚ (TCP/UDP)โ”‚      โ”‚ IOCPๆŽฅๆ”ถ โ”‚      โ”‚  ่งฃ็     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                         โ”‚
                                         โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚    ๅบ”็”จๅฑ‚ๅค„็†๏ผˆไธšๅŠก้€ป่พ‘๏ผ‰        โ”‚
                    โ”‚  MVC / RPC / WebSocket / MQTT  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                         โ”‚
                                         โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚  Coder   โ”‚โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ Sockets  โ”‚โ”€โ”€โ”€โ”€โ”€โ–บ ๅฎขๆˆท็ซฏ
                    โ”‚  ็ผ–็     โ”‚      โ”‚ IOCPๅ‘้€ โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒ็‰นๆ€ง โœจ

็‰นๆ€ง ่ฏดๆ˜Ž
๐Ÿš€ ้ซ˜ๆ€ง่ƒฝ IOCP Windows ๅฎŒๆˆ็ซฏๅฃๆŠ€ๆœฏ๏ผŒๆ”ฏๆŒไธ‡็บงๅนถๅ‘่ฟžๆŽฅ
๐Ÿ“ฆ ้›ถๆ‹ท่ด + ๅ†…ๅญ˜ๆฑ  ๆ”ถๅ‘่ทฏๅพ„็ปŸไธ€ Span/Memory ้›ถๆ‹ท่ด๏ผŒBufferManagerใ€UserTokenPoolใ€MemoryPoolManager ๆฑ ๅŒ–ๅค็”จ๏ผŒๅคงๅน…ๅ‡ๅฐ‘ GC ๅŽ‹ๅŠ›
๐Ÿ”’ SSL/TLS ๅŠ ๅฏ† Stream ๆจกๅผๆ”ฏๆŒๅฎ‰ๅ…จ่ฟžๆŽฅ
๐ŸŒ IPv6 ๆ”ฏๆŒ ๅฎŒๅ…จๅ…ผๅฎน IPv6 ๅ่ฎฎ
๐Ÿ”„ ไผš่ฏ็ฎก็† SessionManager ่‡ชๅŠจ็ฎก็†่ฟžๆŽฅไผš่ฏ
๐Ÿ› ๏ธ ่‡ชๅฎšไน‰ๅ่ฎฎ ICoder ๆŽฅๅฃๆ”ฏๆŒ็ตๆดป็š„ๅ่ฎฎ็ผ–่งฃ็ 
๐Ÿ”— ้“พๅผ้…็ฝฎ SocketOptionBuilder ็ฎ€ๆดๆ˜“็”จ
๐Ÿ“ ๅฎŒๆ•ด็ป„ไปถ MVCใ€WebSocketใ€RPCใ€Redisใ€MQTT ็ญ‰ๅ…จๅœบๆ™ฏ่ฆ†็›–

ๆ€ง่ƒฝๅฏนๆฏ” ๐Ÿ“Š

SAEA.Sockets vs ไผ ็ปŸ Socket

ๆŒ‡ๆ ‡ SAEA.Sockets ไผ ็ปŸ Socket ๆๅ‡
ๅนถๅ‘่ฟžๆŽฅๆ•ฐ 10,000+ ~1,000 10ๅ€
CPU ๅˆฉ็”จ็އ ~85% ~30% ้ซ˜ๆ•ˆ
ๅ†…ๅญ˜ๅ ็”จ ๆฑ ๅŒ–ๅค็”จ ้ข‘็นๅˆ†้… ไฝŽ GC
ๅปถ่ฟŸ ~1ms ~10ms ไฝŽๅปถ่ฟŸ

SAEA.RPC vs HTTP RPC

็‰นๆ€ง SAEA.RPC HTTP RPC
ๅบๅˆ—ๅŒ– Protobuf JSON
ไผ ่พ“ๅ่ฎฎ TCP HTTP
่ฟžๆŽฅๆจกๅผ ้•ฟ่ฟžๆŽฅ ็Ÿญ่ฟžๆŽฅ
ๅนถๅ‘ๆจกๅž‹ IOCP ้˜ปๅกž
ๆ€ง่ƒฝ ้ซ˜ ไธญ

้›ถๆ‹ท่ดๆ”ถๅ‘่ทฏๅพ„๏ผˆๅฎžๆต‹๏ผ‰

SAEA.Sockets ็š„ span ๆ”ถๅŒ…่ทฏๅพ„ๅœจๅŒไธ€ๆ”ถๅ‘ๅŸบๅ‡†ไธ‹๏ผŒ็›ธ่พƒๆ—ง่งฃ็ ่ทฏๅพ„ๆ˜พ่‘—้™ไฝŽๅˆ†้…ไธŽ GC๏ผš

่ทฏๅพ„ ๅžๅ ๅˆ†้… GC0
ๆ—ง่ทฏๅพ„ LegacyDecode 42,345 ๅธง/็ง’ 4,662 B/ๅธง 18
้›ถๆ‹ท่ด SpanDecodeStream 45,344 ๅธง/็ง’ 34 B/ๅธง 0

ๆ•ฐๆฎๆฅ่‡ช SAEA.P2PTest --bench-iocp๏ผˆ4KB ๅธง๏ผŒๅ•ๆœบๅ›ž็Žฏ๏ผŒๆ•ฐๅ€ผ้š็กฌไปถๆณขๅŠจ๏ผ‰ใ€‚


ๅธธ่ง้—ฎ้ข˜ โ“

Q1: SAEA ้€‚ๅˆไป€ไนˆ้กน็›ฎ๏ผŸ

A: SAEA ้€‚ๅˆไปฅไธ‹ๅœบๆ™ฏ๏ผš

  • ๐ŸŽฎ ๆธธๆˆๆœๅŠกๅ™จ๏ผˆๅฎžๆ—ถๅฏนๆˆ˜ใ€็Šถๆ€ๅŒๆญฅ๏ผ‰
  • ๐Ÿ“Š ๅฎžๆ—ถๆ•ฐๆฎๆŽจ้€๏ผˆ่‚ก็ฅจ่กŒๆƒ…ใ€ไฝ“่‚ฒๆฏ”ๅˆ†๏ผ‰
  • ๐Ÿค– IoT ่ฎพๅค‡้€šไฟก๏ผˆไผ ๆ„Ÿๅ™จๆ•ฐๆฎไธŠๆŠฅ๏ผ‰
  • ๐Ÿ’ฌ ๅณๆ—ถ้€š่ฎฏ๏ผˆ็ง่Šใ€็พค่Šใ€ๅฎขๆœ็ณป็ปŸ๏ผ‰
  • ๐Ÿ”— ๅพฎๆœๅŠก้€šไฟก๏ผˆRPC ่ฟœ็จ‹่ฐƒ็”จ๏ผ‰
  • ๐Ÿ“ ๅคงๆ–‡ไปถไผ ่พ“๏ผˆๆ–ญ็‚น็ปญไผ ใ€้ซ˜้€Ÿไผ ่พ“๏ผ‰
  • ๐ŸŒ P2P ็›ด่ฟž้€šไฟก๏ผˆNAT ็ฉฟ้€ใ€ๅฑ€ๅŸŸ็ฝ‘ๅ‘็Žฐ๏ผ‰

Q2: ๅฆ‚ไฝ•้€‰ๆ‹ฉๅˆ้€‚็š„็ป„ไปถ๏ผŸ

A: ๆ นๆฎไฝ ็š„้œ€ๆฑ‚้€‰ๆ‹ฉ๏ผš

ไฝ ็š„้œ€ๆฑ‚                      ๆŽจ่็ป„ไปถ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Web API ๅผ€ๅ‘              โ†’  SAEA.MVC
ๅฎžๆ—ถ่Šๅคฉ/ๆŽจ้€             โ†’  SAEA.WebSocket
P2P ็›ด่ฟž้€šไฟก              โ†’  SAEA.P2P
IoT ่ฎพๅค‡้€šไฟก              โ†’  SAEA.MQTT
Redis ็ผ“ๅญ˜ๆ“ไฝœ            โ†’  SAEA.RedisSocket
ๅพฎๆœๅŠก RPC                โ†’  SAEA.RPC
ๆ–‡ไปถไผ ่พ“                  โ†’  SAEA.FileSocket
่‡ชๅฎšไน‰ๅ่ฎฎ                โ†’  SAEA.Sockets

Q3: ๆ˜ฏๅฆๆ”ฏๆŒ่ทจๅนณๅฐ๏ผŸ

A: ๅŸบไบŽ .NET Standard 2.0๏ผŒๆ”ฏๆŒ๏ผš

  • โœ… Windows๏ผˆIOCP ๆœ€ไฝณๆ€ง่ƒฝ๏ผ‰
  • โœ… Linux๏ผˆๅผ‚ๆญฅ Socket๏ผ‰
  • โœ… macOS

Q4: NuGet ๅฆ‚ไฝ•ๅฎ‰่ฃ…๏ผŸ

A: ๆœ็ดข "SAEA" ๆˆ–็›ดๆŽฅๅฎ‰่ฃ…๏ผš

# Package Manager
Install-Package SAEA.Sockets -Version 26.9.21.1

# .NET CLI
dotnet add package SAEA.Sockets --version 26.9.21.1

NuGet ๅœฐๅ€

Q5: ๅฆ‚ไฝ•ๅฟซ้€ŸไธŠๆ‰‹๏ผŸ

A: 3 ๆญฅๅฟซ้€Ÿๅผ€ๅง‹๏ผš

  1. ๅฎ‰่ฃ…ๅฏนๅบ”็ป„ไปถ็š„ NuGet ๅŒ…
  2. ้˜…่ฏป็ป„ไปถ README ็š„ "30็ง’ๅฟซ้€Ÿๅผ€ๅง‹"
  3. ๆŸฅ็œ‹ๅฎŒๆ•ด็คบไพ‹ไปฃ็ 

ๆฏไธช็ป„ไปถ้ƒฝๆœ‰่ฏฆ็ป†็š„ไฝฟ็”จ็คบไพ‹ๅ’Œๆณจ้‡Šใ€‚

Q6: ๆ˜ฏๅฆๆœ‰็คบไพ‹้กน็›ฎ๏ผŸ

A: Src ไธญๅŒ…ๅซๅคšไธชๆต‹่ฏ•้กน็›ฎ๏ผŒๅฑ•็คบๅฎž้™…ไฝฟ็”จๅœบๆ™ฏ๏ผš

  • SAEA.SocketsTest - Socket ไฝฟ็”จ็คบไพ‹
  • SAEA.WebSocketTest - WebSocket ็คบไพ‹
  • SAEA.MVCTest - MVC Web ๅบ”็”จ็คบไพ‹
  • SAEA.RedisTest - Redis ๆ“ไฝœ็คบไพ‹
  • SAEA.RPCTest - RPC ่ฐƒ็”จ็คบไพ‹
  • SAEA.P2PTest - P2P NAT ็ฉฟ้€็คบไพ‹

ๅฎžไพ‹ๆˆชๅ›พ ๐Ÿ–ผ๏ธ


่ต„ๆบ้“พๆŽฅ ๐Ÿ”—

ๅฎ˜ๆ–น่ต„ๆบ

็›ธๅ…ณ้กน็›ฎ

  • WebRedisManager - ๅŸบไบŽ SAEA.RedisSocket ็š„ Redis ็ฎก็†ๅทฅๅ…ท
  • SAEA.Rested - ๅŸบไบŽ SAEA.MVC ็š„ REST API ็คบไพ‹
  • GFF - ๅŸบไบŽ SAEA ็š„ไปฟ QQ ้€šไฟก็จ‹ๅบ

ๆŠ€ๆœฏๆ”ฏๆŒ


่ฎธๅฏ่ฏ

Apache License 2.0

About

SAEA.Socket is a zero-copy, high-performance sockets network framework built on IOCP and targeting .NET Standard 2.0. The source code (Src) includes demo use cases such as P2P, SOCKS5, WebSocket client and server, message queue, RPC, Redis driver, HTTP server, MQTT, MVC, DNS, message server, and more.

Topics

Resources

Stars

425 stars

Watchers

35 watching

Forks

Releases

Packages

Used by

Contributors

Languages