WitCom: نوسازی ارتباطات مشتری-سرور – انجمن DEV

WitCom یک API همه کاره و نوآورانه است که برای ساده سازی ارتباط مشتری-سرور، ارائه رابط های بصری، امنیت قوی و گزینه های سریال سازی انعطاف پذیر طراحی شده است. با پشتیبانی از مکانیسمهای انتقال چندگانه، از جمله WebSocket، TCP، REST، و حتی فایلهای دارای نقشه حافظه، نیازهای برنامههای متنوع را برآورده میکند. معماری رویداد محور و اجزای قابل تنظیم آن، آن را به انتخابی ایدهآل برای پروژههای مقیاس کوچک یا سیستمهای توزیع شده پیچیده تبدیل میکند که در آن کلاینت و سرور با .Net پیادهسازی میشوند و WitCom را به عنوان جایگزینی مدرن و ساده برای WCF و SignalR قرار میدهد.
ویژگی های کلیدی WitCom
-
سادگی و استفاده بومی: طراحی WitCom اجرای بصری را تضمین می کند. با حذف اتکا به پیامهای مبتنی بر متن، توابع لامبدا یا عبارات پیچیده، فرآیند توسعه را بهویژه برای توسعهدهندگانی که از چارچوبهای دیگر تغییر میکنند، ساده میکند. رویکرد بومی آن به این معنی است که توسعه دهندگان با ابزارها و پارادایم های آشنا کار می کنند و منحنی یادگیری را کاهش می دهند.
-
ارتباط دوبلکس: WitCom در برقراری ارتباط کامل دوطرفه برتری دارد و امکان تبادل پیام دو طرفه یکپارچه بین مشتری و سرور را فراهم می کند. پشتیبانی داخلی رویداد و پاسخ به تماس طیف گستردهای از انواع نمایندگان مانند PropertyChangedEventHandler را در خود جای میدهد. این مدل دوبلکس برای برنامههایی که نیاز به تعامل دائمی دارند، مانند بهروزرسانیهای زنده، اشتراکگذاری دادههای همگام، یا سیستمهای مشارکتی ایدهآل است.
-
سرور آینه های پروکسی سمت مشتری: یکی از ویژگی های تعیین کننده WitCom توانایی آن برای ایجاد یک پروکسی پویا در سمت مشتری است که رابط شی سرور را منعکس می کند. این بدان معنی است که با فراخوانی روش ها یا دسترسی به ویژگی ها در پروکسی مشتری، شما مستقیماً با سرور تعامل دارید. علاوه بر این، اشتراک رویدادها در پروکسی به طور یکپارچه رویدادهای سمت سرور را راهاندازی میکند و کل ارتباط کلاینت و سرور را برای کاربر نامرئی و بدون دردسر میکند. توسعه دهندگان به طور طبیعی با رابط کار می کنند، در حالی که WitCom تمام ارتباطات اساسی را مدیریت می کند.
-
معماری رابط محور: رابط های سرویس در WitCom با استفاده از رابط های استاندارد دات نت تعریف می شوند. این امر ایمنی نوع قوی را ارتقا میدهد و امکان تولید خودکار پراکسیهای پویا سمت کلاینت را فراهم میکند که به عنوان کپی دقیق سرویسهای سمت سرور عمل میکنند و از رفتار ثابت در سراسر برنامه اطمینان میدهند.
-
تطبیق پذیری حمل و نقل: WitCom از انواع مکانیسم های حمل و نقل پشتیبانی می کند و آن را با طیف وسیعی از سناریوها و زیرساخت ها سازگار می کند:
- فایل های دارای نقشه حافظه: طراحی شده برای ارتباطات بین فرآیندی فوق سریع (IPC) روی یک ماشین.
- به نام لوله: برای IPC در یک شبکه یا ماشین موثر است و از چندین مشتری پشتیبانی می کند.
- TCP: ارتباطات قوی و قابل اعتمادی را برای سیستم های توزیع شده فراهم می کند و آن را برای کاربردهای در مقیاس بزرگ مناسب می کند.
- وب سوکت: ارتباط دو طرفه کارآمد و بیدرنگ را در بین پلتفرمهای وب فعال میکند.
- استراحت: تعامل با مشتریان غیر دات نت را ساده می کند و استقرار سریع API های RESTful را برای ادغام های خارجی فراهم می کند.
-
سفارشی سازی گسترده:
- پشتیبانی کامل از توابع و خواص عمومی.
- فرمت های سریال سازی انعطاف پذیر، از جمله JSON و MessagePack.
- ویژگیهای امنیتی اختیاری، مانند رمزگذاری سرتاسر و مجوز مبتنی بر توکن.
- توسعهدهندگان میتوانند پیادهسازیهای پیشفرض را برای نیازمندیهای بسیار خاص لغو کنند و اطمینان حاصل کنند که API با خواستههای پروژه منحصربهفرد سازگار است.
امنیت پیشرفته: رمزگذاری و مجوز
امنیت در قلب طراحی WitCom نهفته است و مکانیزم های قوی برای رمزگذاری و مجوز ارائه می دهد. این قابلیتها بر روی رابطهای منعطف و توسعهپذیر ساخته شدهاند، با پیادهسازیهای پیشفرض برای اکثر موارد استفاده استاندارد.
-
رمزگذاری انتها به انتها: چارچوب رمزگذاری WitCom ارتباط امن بین مشتریان و سرورها را تضمین می کند. به طور پیش فرض، AES (استاندارد رمزگذاری پیشرفته) رمزگذاری متقارن را مدیریت می کند، در حالی که RSA تبادل کلید ایمن را تسهیل می کند. این امنیت لایه ای فراهم می کند:
- محرمانه بودن داده ها: تضمین می کند که داده های ارسال شده رمزگذاری شده و برای اشخاص غیرمجاز غیرقابل دسترسی است.
- صداقت: یکپارچگی داده ها را تأیید می کند و از دستکاری در حین انتقال جلوگیری می کند.
توسعه دهندگان می توانند منطق رمزگذاری سفارشی را با پایبندی به آن پیاده سازی کنند IEncryptorServer
و IEncryptorClient
رابط ها، اجازه می دهد تا اقدامات امنیتی مناسب در صورت لزوم.
پیکربندی مثال برای فعال کردن رمزگذاری:
var server = WitComServerBuilder.Build(options =>
{
options.WithEncryption();
});
var client = WitComClientBuilder.Build(options =>
{
options.WithEncryption();
});
-
مجوز مبتنی بر توکن: مجوز به طور یکپارچه از طریق سیستم های مبتنی بر توکن ادغام می شود و یک لایه امنیتی اضافی را ارائه می دهد. بهطور پیشفرض، WitCom شامل تأییدکنندههای نشانه استاتیک مناسب برای اکثر سناریوها است. توسعه دهندگان می توانند عملکرد را با پیاده سازی گسترش دهند
IAccessTokenValidator
برای منطق مجوز سفارشی، امکان ادغام با سیستم های مدیریت هویت پیشرفته را فراهم می کند.
مثال:
public class AccessTokenValidator : IAccessTokenValidator
{
private readonly string _validToken;
public AccessTokenValidator(string validToken)
{
_validToken = validToken;
}
public bool IsAuthorizationTokenValid(string token)
{
return token == _validToken;
}
}
var server = WitComServerBuilder.Build(options =>
{
options.WithAccessTokenValidator(new AccessTokenValidator("secure-token"));
});
گزینه های سریال سازی: JSON و MessagePack
سریال سازی در WitCom هم انعطاف پذیر و هم کارآمد است و نیازهای مختلف برنامه را برآورده می کند. اجرای پیشفرض سریالسازها ارائه شدهاند، اما توسعهدهندگان میتوانند با پیادهسازی آنها را سفارشی کنند IMessageSerializer
رابط.
- سریال سازی JSON: JSON فرمت پیشفرض است که خوانایی بینظیر و پشتیبانی گسترده در سراسر پلتفرمها ارائه میدهد. قالب قابل خواندن توسط انسان به ویژه در هنگام اشکال زدایی و ادغام با سیستم های شخص ثالث مفید است.
پیکربندی مثال:
var server = WitComServerBuilder.Build(options =>
{
options.WithJson();
});
var client = WitComClientBuilder.Build(options =>
{
options.WithJson();
});
- سریال سازی MessagePack: برای برنامه های کاربردی با کارایی بالا، MessagePack فرمت سریال سازی باینری فشرده را ارائه می دهد که به طور قابل توجهی حجم بار را کاهش می دهد. این برای محیطها یا سیستمهای حساس به پهنای باند با الزامات عملکرد سختگیرانه ایدهآل است.
پیکربندی مثال:
var server = WitComServerBuilder.Build(options =>
{
options.WithMessagePack();
});
var client = WitComClientBuilder.Build(options =>
{
options.WithMessagePack();
});
راه اندازی WitCom
برای نشان دادن سادگی WitCom، مثال زیر را برای راه اندازی یک سرویس اولیه در نظر بگیرید:
- رابط سرویس را تعریف کنید:
public interface IExampleService
{
event ExampleServiceEventHandler ProcessingStarted;
event ExampleServiceProgressEventHandler ProgressChanged;
event ExampleServiceProcessingEventHandler ProcessingCompleted;
bool StartProcessing();
void StopProcessing();
}
public delegate void ExampleServiceEventHandler();
public delegate void ExampleServiceProgressEventHandler(double progress);
public delegate void ExampleServiceProcessingEventHandler(ProcessingStatus status);
public class ExampleService : IExampleService
{
public event ExampleServiceEventHandler ProcessingStarted = delegate { };
public event ExampleServiceProgressEventHandler ProgressChanged = delegate { };
public event ExampleServiceProcessingEventHandler ProcessingCompleted = delegate { };
private CancellationTokenSource? _cancellationTokenSource;
public bool StartProcessing()
{
if (_cancellationTokenSource != null) return false;
_cancellationTokenSource = new CancellationTokenSource();
Task.Run(Process);
ProcessingStarted();
return true;
}
public void StopProcessing()
{
_cancellationTokenSource?.Cancel();
}
private void Process()
{
for (int i = 1; i <= 100; i++)
{
if (_cancellationTokenSource?.IsCancellationRequested == true)
{
ProcessingCompleted(ProcessingStatus.Interrupted);
return;
}
ProgressChanged(i);
Thread.Sleep(100);
}
ProcessingCompleted(ProcessingStatus.Success);
}
}
var server = WitComServerBuilder.Build(options =>
{
options.WithService(new ExampleService());
options.WithWebSocket("http://localhost:5000", 10);
options.WithJson();
options.WithEncryption();
});
server.StartWaitingForConnection();
var client = WitComClientBuilder.Build(options =>
{
options.WithWebSocket("ws://localhost:5000");
options.WithJson();
options.WithEncryption();
});
await client.ConnectAsync(TimeSpan.FromSeconds(5), CancellationToken.None);
var service = client.GetService();
service.ProcessingStarted += () => Console.WriteLine("Processing Started");
service.ProgressChanged += progress => Console.WriteLine($"Progress: {progress}%");
service.ProcessingCompleted += status => Console.WriteLine($"Processing Completed: {status}");
service.StartProcessing();
نمونه ها و مخزن GitHub
کد منبع کامل و نمونههای WitCom را کاوش کنید:
مزایای WitCom
- سهولت استفاده: WitCom کد دیگ بخار را حذف می کند و یک تجربه راه اندازی بصری را ارائه می دهد.
- مدل رویداد محور: طراحی رویداد محور آن را برای برنامه های واکنشی و بلادرنگ ایده آل می کند.
- عملکرد: ویژگی هایی مانند فایل های نگاشت حافظه عملکرد را برای سناریوهای IPC محلی بهینه می کند.
- انعطاف پذیری: گزینه های حمل و نقل و سریال سازی گسترده موارد استفاده متنوع را برآورده می کند.
WitCom به توسعه دهندگان یک چارچوب قوی و در عین حال ساده برای ارتباط مدرن مشتری و سرور قدرت می دهد. با ترکیب ویژگیهای قدرتمند، عملکرد بالا و انعطافپذیری، خواستههای سیستمهای مقیاس کوچک و سازمانی را برآورده میکند. چه ساخت برنامه های کاربردی پاسخگو یا مدیریت سیستم های توزیع شده در مقیاس بزرگ، WitCom یک گام مهم به جلو در چارچوب های ارتباطی دات نت است.