SUNRPC تمكن من الرسائل ذات الاتجاه الواحد (تدفق / تجميع؟)

StackOverflow https://stackoverflow.com/questions/3606862

  •  25-09-2019
  •  | 
  •  

سؤال

لدينا بعض الخدمات التي تستخدم SUNRPC على Linux (RHEL 4/5) التي نرغب في تسريعها.

لا تتطلب مكالمة RPC الخاصة بنا أي قيمة إرجاع ، على الرغم من أن طبيعة RPC ، يتم إرسال ACK دائمًا على أي حال. يقدم هذا الكمون الذي أصبح مؤخرًا مشكلة - عند تشغيله على نقل موثوق (TCP) ، نأمل أن نتجنب الكمون الذي أدخله رد RPC.

مستندات هنا يشير إلى أن Solaris لديه الكلمة الرئيسية "Oneway" التي تمكن ذلك تمامًا ، على الرغم من أن Linux/GLIBC لا يبدو أنه يدعم هذا.

هل هناك أي طريقة يمكننا تمكين "التدفق" أو المراسلة في اتجاه واحد مع SUNRPC على Linux؟

هل كانت مفيدة؟

المحلول

هناك تغييران يجب إجراؤهما على المعيار clnt_call() الاحتجاج من أجل الحصول على مكالمة RPC غير متزامنة (أو "مجنونة") NULL ويجب أن تكون حجة المهلة صفرًا ، أي

static struct timeval ZERO_TIMEOUT = { 0, 0 };
static char clnt_res;
memset((char*)&clnt_res, 0, sizeof(clnt_res);
if (clnt_call(clnt, messageType, (xdrproc_t)xdr_messageType_t, (caddr_t)argp,
            (xdrproc_t)NULL, (caddr_t)&clnt_res, ZERO_TIMEOUT) != RPC_SUCCESS) {
    ...
}

نصائح أخرى

إذا كانت مكتبة RPC الخاصة بك لا تدعم اتصال "Oneway" ، فيمكنك دائمًا استخدام نمط تجمع الموضوع لمحاكاة نوع "النار ونسيان" نوع من الاحتجاج في برنامجك. بدلاً من إرسال المكالمة عن بُعد مباشرة (وبالتالي الحظر حتى تتلقى إجابة) ، يمكنك enqueue أمر هذا يقوم بالاتصال البعيد في مؤشر ترابط مختلف ويسمح لك البرنامج الرئيسي بالمتابعة مع تنفيذها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top