shadesmar
1.0.0
مكتبة IPC التي تستخدم الذاكرة المشتركة للنظام لتمرير الرسائل. يدعم نشر subscribe و RPC.
يتطلب: Linux و X86. تحذير: برنامج ألفا.
العديد من المشتركين والناشرين.
يستخدم مخزن مؤقت دائري لتمرير الرسائل بين العمليات.
أسرع من استخدام مكدس الشبكة. إنتاجية عالية ، انخفاض الكمون للرسائل الكبيرة.
اللامركزية ، دون جوع الموارد.
تقليل حركة البيانات أو تحسينها باستخدام نسخ مخصصة.
يوجد ملف رأس واحد تم إنشاؤه من رمز المصدر الذي يمكن العثور عليه هنا.
إذا كنت ترغب في إنشاء ملف الرأس المفرد بنفسك ، فقم بتشغيل الريبو وتشغيله:
$ cd shadesmar
$ python3 simul/simul.py
سيؤدي ذلك إلى إنشاء الملف في include/ .
الناشر:
# include < shadesmar/pubsub/publisher.h >
int main () {
shm::pubsub::Publisher p ( " topic_name " );
const uint32_t data_size = 1024 ;
void *data = malloc (data_size);
for ( int i = 0 ; i < 1000 ; ++i) {
p. publish (data, data_size);
}
}المشترك:
# include < shadesmar/pubsub/subscriber.h >
void callback (shm::memory::Memblock *msg) {
// `msg->ptr` to access `data`
// `msg->size` to access `data_size`
// The memory will be free'd at the end of this callback.
// Copy to another memory location if you want to persist the data.
// Alternatively, if you want to avoid the copy, you can call
// `msg->no_delete()` which prevents the memory from being deleted
// at the end of the callback.
}
int main () {
shm::pubsub::Subscriber sub ( " topic_name " , callback);
// Using `spin_once` with a manual loop
while ( true ) {
sub. spin_once ();
}
// OR
// Using `spin`
sub. spin ();
}عميل:
# include < shadesmar/rpc/client.h >
int main () {
Client client ( " channel_name " );
shm::memory::Memblock req, resp;
// Populate req.
client. call (req, &resp);
// Use resp here.
// resp needs to be explicitly free'd.
client. free_resp (&resp);
}الخادم:
# include < shadesmar/rpc/server.h >
bool callback ( const shm::memory::Memblock &req,
shm::memory::Memblock *resp) {
// resp->ptr is a void ptr, resp->size is the size of the buffer.
// You can allocate memory here, which can be free'd in the clean-up lambda.
return true ;
}
void clean_up (shm::memory::Memblock *resp) {
// This function is called *after* the callback is finished. Any memory
// allocated for the response can be free'd here. A different copy of the
// buffer is sent to the client, this can be safely cleaned.
}
int main () {
shm::rpc::Server server ( " channel_name " , callback, clean_up);
// Using `serve_once` with a manual loop
while ( true ) {
server. serve_once ();
}
// OR
// Using `serve`
server. serve ();
}