DCSIMG
Push the Turbo button - C# and some more

C# and some more

A little bit from everything

Push the Turbo button

תשתית Open Source להעברת מידע בשם ZeroMQ.

חלקכם אולי מכירים אותה אבל אני מניח שרובכם לא, אם אתם נמנים עם החלק השני של האנשים אז הפוסט הזה מיועד לכם.

ZeroMQ נכתבה ב-C תחת רשיון LGPL Open Source אולם נכתבו לה Wrappers עבור שפות רבות כגון C++, C#, F#, Java, Node.js, Objective-C, Perl, PHP, Python, Ruby ועוד.

ממבט ראשון היא נראית כמו ספריה המכילה יכולות תקשורת אבל בעצם משמשת כתשתית אסינכרונית להעברת מידע בין Threads ו-Process באמצעות שימוש ב-Queues. היא מאפשרת לכם להעביר הודעות עד גודל 1GBבמגוון שכבות תקשורת כגון In-Process, TCP, Multicast. ניתן לחבר socket בין N ל-N משתמשים באמצעות שימוש ב- Pub-Sub, fanout, task distribution ו-Requst-Reply. חשוב להדגיש שהתשתית מהירה מאוד ואסינכרונית מה שמאפשר ליצור אפליקציות שניתן לבצע להן Scale up בכמעט אפס עבודה.

שילוב של API אינטואיטיבי, יעילות, דינמיות וביצועים מדהימים הופכים את התשתית למאוד אטרקטיבית למי שמעוניין להעביר מידע בקצבים גבוהים ביותר עם זמני תגובה מהירים.

Publisher – Subscriber

מתחשק לכם לעבוד בתצורת Publisher-Subscriber? אין בעיה, בדוגמא הבאה תראו כמה זה פשוט.

בשיטת העבודה של Publisher-Subscriber, יש לנו יצרן ומספר לקוחות שאמורים לקבל את המידע. כמתואר בדיאגרמה הבאה:

Publisher-Subscriber

קודם כל נגדיר את ה-Publisher:

// Create the context which manage all sockets. Usually a single context for entire application
Context context = new ZMQ.Context();
// Create a socket of type publisher
Socket socket = context.Socket(SocketType.PUB);

// Bind to tcp with specified port
socket.Bind("tcp://*:5555");

// Just send the message you want.
socket.Send("Demo Hello World", Encoding.Unicode);

המילה הראשונה בהודעה שנשלחה היא בעצם ה-Topic של ההודעה שעל פיה מבצע ה-Subscriber רישום.

הגדרת ה-Subscriber :

// Again, create a context to hold the sockets
Context context = new ZMQ.Context();
// Create a socket of type subscriber
Socket socket = context.Socket(SocketType.SUB);

// Register the messages you are interested in
socket.Subscribe("Demo", Encoding.Unicode);

// Connect the producer
socket.Connect("tcp://localhost:5555");

// Wait for incoming messages
while (true)
{
var message = socket.Recv(Encoding.Unicode);
Console.WriteLine(message);
}

 

כמובן שישנם עוד שיטות שניתן להשתמש עם ZeroMQ :

Request-Response

שרת ולקוח המבצעים פעולת תישאול. לקוח פונה לשרת ומקבל ממנו תשובה

Req-Rep

Ventilator

בשיטה הזו, יש לנו Ventilator שמחלק את העבודה  בין workers שונים המסוגלים לבצע את העבודה במקביל. בסיום התהליך, ה-Workers שולחים את התוצרים ל-Sink.

Ventilator

דוגמאות קוד והסברים מעמיקים יותר ניתן למצוא באתר ZeroMQ.

Wrapper ל-#C ניתן למצוא כאן https://github.com/zeromq/clrzmq או באמצעות NuGet ע”י הוספת Package בשם clrzmq.

תוכן התגובה

מנדל כתב/ה:

מצויין

# May 31, 2012 2:08 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 4 and 6 and type the answer here:


Enter the numbers above: