کتابخانه‌ی استاندارد · شبکه

فراخوان دور rpc

JSON-RPC 2.0 و MessagePack-RPC: سرور، کارخواه و ثبت متدها.

واردسازی فراخوان دور

با فراخوان دور یک برنامه متدهای برنامه‌ی دیگر را صدا می‌زند، انگار روال‌های خودش‌اند. در سمت سرور هر متد را با ثبت متد به یک روال وصل می‌کنید؛ آن روال شماره‌ی فراخوان را می‌گیرد، پارامترها را با پارامتر عددی فراخوان و مانند آن می‌خواند و با پاسخ ... یا شکست جواب می‌دهد.

پیام‌ها با کدک جیسون (JSON-RPC 2.0) یا مسگ‌پک رد و بدل می‌شوند و روی TCP با یکی از سه قاب‌بندی خطی، سرآیندی (مثل LSP) یا طول‌دار جدا می‌شوند؛ کارخواه و سرور باید قاب‌بندی یکسانی داشته باشند. پردازش متن همین را بدون شبکه انجام می‌دهد تا RPC را پشت یک مسیر اچ تی تی پی بگذارید.

گونه‌ها

سرور فراخوان Server

ساختار سرور فراخوان
سرور RPC.
نامانگلیسیگونهتوضیح
portportصحیح = 0درگاه؛ صفر یعنی یک درگاه آزاد.
codeccodecصحیح = 0کدک.
framingframingصحیح = 0قاب‌بندی.
listen_fdlisten_fdصحیح۶۴ = -1سوکت گوش دادن.
runningrunningمنطقی = نادرستدر حال اجرا.
servedservedصحیح = 0شمار اتصال‌های پاسخ‌داده.
rpc-Serve.salam
واردسازی فراخوان دور
واردسازی شبکه.تی سی پی شبکه
واردسازی فشرده سازی

روال پژواک(ج: صحیح۶۴):
    فراخوان دور.پاسخ دادن(ج، فراخوان دور.پارامترهای فراخوان(ج))
پایان

روال ریشه:
    فراخوان دور.ثبت متد("echo"، پژواک)
    اگر فراخوان دور.پردازش متن("").طول() == ۰:
        _ := فراخوان دور.خدمت ورودی خروجی(فراخوان دور.قاب سرآیندی)
        برگشت
    پایان

    ناپایا س := فراخوان دور.سرور جدید(۴۰۰۰، فراخوان دور.کدک مسگ‌پک)
    فراخوان دور.تنظیم قاب‌بندی(س، فراخوان دور.قاب طول‌دار)
    اگر فراخوان دور.گوش دادن(س):
        سرچاپ "روی درگاه"، فراخوان دور.درگاه سرور(س)، س.running
        فراخوان دور.خدمت(س)
    پایان

    ا := تی سی پی شبکه.شماره گیری("127.0.0.1"، ۴۰۰۱)
    _ := فراخوان دور.خدمت به اتصال(ا.fd، فراخوان دور.کدک جیسون، فراخوان دور.قاب خطی)

    ک := تی سی پی شبکه.شماره گیری("127.0.0.1"، ۴۰۰۲)
    ناپایا کارخواه := فراخوان دور.کارخواه از توصیف‌گر(ک.fd، فراخوان دور.کدک جیسون)
    سرچاپ فراخوان دور.نتیجه متنی(فراخوان دور.فراخوان بدون پارامتر(کارخواه، "version"))

    ناپایا ج := فراخوان دور.جریان جدید(ک.fd)
    _ := فراخوان دور.نوشتن قاب متنی(ک.fd، فراخوان دور.قاب خطی، `{"jsonrpc":"2.0","method":"echo","params":[1],"id":1}`)
    _ := فراخوان دور.نوشتن قاب(ک.fd، فراخوان دور.قاب خطی، فشرده سازی.بافر از رشته(`{"jsonrpc":"2.0","method":"echo","id":2}`))
    ناپایا سالم := نادرست
    سرچاپ فراخوان دور.خواندن قاب متنی(ج، فراخوان دور.قاب خطی، سالم)
    پاسخ := فراخوان دور.پردازش بار(فراخوان دور.کدک جیسون، فشرده سازی.بافر از رشته(`{"jsonrpc":"2.0","method":"echo","params":[3],"id":3}`))
    سرچاپ فشرده سازی.بافر به رشته(پاسخ)
    فراخوان دور.آزادسازی جریان(ج)
    فراخوان دور.توقف سرور(س)
پایان

جریان Stream

ساختار جریان
جریان ورودی که قاب‌ها را از سوکت یا حافظه جدا می‌کند.
نامانگلیسیگونهتوضیح
fdfdصحیح۶۴ = -1سوکت.
datadatacompress.ByteBufداده‌ی خوانده‌شده.
posposصحیح = 0جای خواندن.
closedclosedمنطقی = نادرستورودی تمام شده.
has_fdhas_fdمنطقی = نادرستروی سوکت است.
rpc-Frames.salam
واردسازی فراخوان دور
واردسازی فشرده سازی

روال ریشه:
    خط := فراخوان دور.قاب‌بندی متن(فراخوان دور.قاب خطی، `{"a":1}`)
    سرآیندی := فراخوان دور.قاب‌بندی متن(فراخوان دور.قاب سرآیندی، `{"b":2}`)
    طول‌دار := فراخوان دور.قاب‌بندی(فراخوان دور.قاب طول‌دار، فشرده سازی.بافر از رشته(`{"c":3}`))
    سرچاپ خط.len، سرآیندی.len، طول‌دار.len
    سرچاپ فشرده سازی.بافر به رشته(سرآیندی).طول() > ۰

    ناپایا ج := فراخوان دور.جریان حافظه()
    فراخوان دور.تغذیه متن(ج، `{"x":1}` + "\n" + `{"x":2}` + "\n")
    ناپایا سالم := نادرست
    سرچاپ فراخوان دور.خواندن قاب متنی(ج، فراخوان دور.قاب خطی، سالم)، سالم
    سرچاپ فراخوان دور.باقی‌مانده جریان(ج)
    سرچاپ فراخوان دور.خواندن قاب متنی(ج، فراخوان دور.قاب خطی، سالم)
    _ := فراخوان دور.خواندن قاب متنی(ج، فراخوان دور.قاب خطی، سالم)
    سرچاپ سالم، فراخوان دور.جریان بسته(ج)

    ناپایا ج۲ := فراخوان دور.جریان حافظه()
    فراخوان دور.تغذیه بافر(ج۲، سرآیندی)
    فراخوان دور.تغذیه بافر(ج۲، طول‌دار)
    سرچاپ فراخوان دور.خواندن قاب متنی(ج۲، فراخوان دور.قاب سرآیندی، سالم)
    ب := فراخوان دور.خواندن قاب(ج۲، فراخوان دور.قاب طول‌دار، سالم)
    سرچاپ فشرده سازی.بافر به رشته(ب)، سالم
    سرچاپ فراخوان دور.اندازه تکه خواندن، فراخوان دور.بیشینه اندازه قاب
    فراخوان دور.آزادسازی جریان(ج)
    فراخوان دور.آزادسازی جریان(ج۲)
پایان
خروجی8 28 11 true {"x":1} true 8 {"x":2} false false {"b":2} {"c":3} true 4096 33554432

کارخواه Client

ساختار کارخواه
کارخواه RPC روی یک اتصال TCP.
نامانگلیسیگونهتوضیح
connconntcp.Connاتصال.
streamstreamجریانجریان خواندن.
codeccodecصحیح = 0کدک.
framingframingصحیح = 0قاب‌بندی.
next_idnext_idصحیح۶۴ = 1شناسه‌ی درخواست بعدی.
okokمنطقی = نادرستسالم است.
last_errorlast_errorرشته = ""آخرین خطا.
rpc-Client.salam
واردسازی فراخوان دور
واردسازی کدگذاری.مقدار
واردسازی شبکه.اچ تی تی پی شبکه
واردسازی شبکه.مسیریاب شبکه
واردسازی همگام سازی

ناپایا سرور := فراخوان دور.سرور جدید(۰، فراخوان دور.کدک جیسون)
ناپایا آماده := همگام سازی.گروه انتظار جدید()

روال جمع(ج: صحیح۶۴):
    فراخوان دور.پاسخ عددی(ج، فراخوان دور.پارامتر عددی فراخوان(ج، "a"، ۰) + فراخوان دور.پارامتر عددی فراخوان(ج، "b"، ۱))
پایان

روال زمان(ج: صحیح۶۴):
    فراخوان دور.پاسخ متنی(ج، "12:00")
پایان

روال یادداشت(ج: صحیح۶۴):
    فراخوان دور.پاسخ تهی(ج)
پایان

روال اجرای سرور():
    _ := فراخوان دور.گوش دادن(سرور)
    همگام سازی.اتمام(آماده)
    _ := فراخوان دور.خدمت به تعداد(سرور، ۱)
پایان

روال نقطه پایانی(ز: صحیح۶۴):
    اچ تی تی پی شبکه.جیسون زمینه(ز، فراخوان دور.پردازش متن(اچ تی تی پی شبکه.بدنه زمینه(ز)))
پایان

روال ریشه:
    فراخوان دور.ثبت متد("add"، جمع)
    فراخوان دور.ثبت متد("time"، زمان)
    فراخوان دور.ثبت متد("note"، یادداشت)
    فراخوان دور.تنظیم قاب‌بندی(سرور، فراخوان دور.قاب خطی)
    همگام سازی.افزودن(آماده، ۱)
    ن := spawn(اجرای سرور)
    همگام سازی.انتظار(آماده)
    سرچاپ فراخوان دور.درگاه سرور(سرور) > ۰

    ناپایا ک := فراخوان دور.اتصال کارخواه("127.0.0.1"، فراخوان دور.درگاه سرور(سرور)، فراخوان دور.کدک جیسون)
    فراخوان دور.تنظیم قاب‌بندی کارخواه(ک، فراخوان دور.قاب خطی)
    سرچاپ فراخوان دور.کارخواه معتبر(ک)
    ناپایا پ := مقدار.آرایه جدید()
    مقدار.افزودن به آرایه(پ، مقدار.مقدار صحیح(۲))
    مقدار.افزودن به آرایه(پ، مقدار.مقدار صحیح(۴۰))
    سرچاپ فراخوان دور.نتیجه عددی(فراخوان دور.فراخوان(ک، "add"، پ))
    سرچاپ فراخوان دور.نتیجه متنی(فراخوان دور.فراخوان بدون پارامتر(ک، "time"))
    ناپایا آرگ := وکتور {} برگردان وکتور<مقدار.مقدار>
    آرگ.افزودن(مقدار.مقدار صحیح(۱))
    آرگ.افزودن(مقدار.مقدار صحیح(۲))
    سرچاپ فراخوان دور.نتیجه عددی(فراخوان دور.فراخوان با آرگومان(ک، "add"، آرگ))
    سرچاپ فراخوان دور.اعلان(ک، "note"، مقدار.آرایه جدید())
    ناپایا دسته := وکتور {} برگردان وکتور<فراخوان دور.درخواست>
    دسته.افزودن(فراخوان دور.درخواست جدید("add"، پ، ۱۰))
    دسته.افزودن(فراخوان دور.درخواست جدید("missing"، مقدار.آرایه جدید()، ۱۱))
    پاسخ‌ها := فراخوان دور.فراخوان دسته‌ای(ک، دسته)
    سرچاپ پاسخ‌ها.items.طول()، فراخوان دور.نتیجه عددی(پاسخ‌ها.items[۰])
    سرچاپ فراخوان دور.پاسخ خطاست(پاسخ‌ها.items[۱])، فراخوان دور.کد خطا(پاسخ‌ها.items[۱])، فراخوان دور.پیام خطا(پاسخ‌ها.items[۱])
    فراخوان دور.بستن کارخواه(ک)
    سرچاپ فراخوان دور.کارخواه معتبر(ک)، فراخوان دور.خطای کارخواه(ک).طول() >= ۰
    join(ن)
    فراخوان دور.توقف سرور(سرور)

    ناپایا م := مسیریاب شبکه.مسیریاب جدید()
    مسیریاب شبکه.ارسال(م، "/rpc"، نقطه پایانی)
    ناپایا ه := اچ تی تی پی شبکه.سرور جدید(۱۹۶۱۱)
    اچ تی تی پی شبکه.استفاده(ه، م)
    _ := اچ تی تی پی شبکه.اجرا در پس زمینه(ه)
    ر := فراخوان دور.فراخوان اچ تی تی پی("http://127.0.0.1:19611/rpc"، "add"، پ، ۷)
    سرچاپ فراخوان دور.نتیجه عددی(ر)
پایان
خروجیtrue true 42 12:00 3 true 2 42 true -32601 Method not found false true 42

خطای فراخوان Error

ساختار خطای فراخوان
خطای JSON-RPC.
نامانگلیسیگونهتوضیح
codecodeصحیح = 0کد.
messagemessageرشته = ""پیام.
datadatavalue.Valueداده‌ی اضافه.
has_datahas_dataمنطقی = نادرستداده دارد.
rpc-Messages.salam
واردسازی فراخوان دور
واردسازی کدگذاری.مقدار
واردسازی فشرده سازی

روال ریشه:
    ناپایا پ := مقدار.آرایه جدید()
    مقدار.افزودن به آرایه(پ، مقدار.مقدار صحیح(۲))
    مقدار.افزودن به آرایه(پ، مقدار.مقدار رشته("سلام"))
    مقدار.افزودن به آرایه(پ، مقدار.مقدار اعشاری(۱.۵))
    مقدار.افزودن به آرایه(پ، مقدار.مقدار منطقی(درست))
    د := فراخوان دور.درخواست جدید("calc"، پ، ۱)
    سرچاپ فراخوان دور.کدگذاری درخواست جیسون(د)
    سرچاپ فراخوان دور.تعداد پارامتر(د)، فراخوان دور.پارامتر عددی(د، "a"، ۰)، فراخوان دور.پارامتر متنی(د، "b"، ۱)
    سرچاپ فراخوان دور.پارامتر اعشاری(د، "c"، ۲)، فراخوان دور.پارامتر بولی(د، "d"، ۳)، فراخوان دور.پارامتر دارد(د، "e"، ۴)
    سرچاپ مقدار.به صحیح(فراخوان دور.پارامتر در جایگاه(د، ۰))، مقدار.به صحیح(فراخوان دور.پارامتر(د، "a"، ۰))
    ناپایا ش := مقدار.شیء جدید()
    مقدار.تنظیم کلید(ش، "name"، مقدار.مقدار رشته("علی"))
    د۲ := فراخوان دور.درخواست با شناسه متنی("greet"، ش، "req-1")
    سرچاپ فراخوان دور.کدگذاری درخواست جیسون(د۲)
    سرچاپ مقدار.به رشته(فراخوان دور.پارامتر نام‌دار(د۲، "name"))
    ا := فراخوان دور.اعلان جدید("tick"، مقدار.آرایه جدید())
    سرچاپ فراخوان دور.اعلان است(ا)، فراخوان دور.کدگذاری درخواست جیسون(ا)

    ناپایا سالم := نادرست
    خ := فراخوان دور.کدگشایی درخواست جیسون(`{"jsonrpc":"2.0","method":"add","params":{"a":1,"b":2},"id":9}`، سالم)
    سرچاپ سالم، خ.method، خ.msgid، فراخوان دور.پارامتر عددی(خ، "b"، ۱)

    پاسخ := فراخوان دور.پاسخ جدید(مقدار.مقدار صحیح(۱)، مقدار.مقدار رشته("ok"))
    سرچاپ فراخوان دور.کدگذاری پاسخ جیسون(پاسخ)
    خطا := فراخوان دور.خطای استاندارد(فراخوان دور.کد روش یافت نشد)
    سرچاپ خطا.code، خطا.message
    سرچاپ فراخوان دور.کدگذاری پاسخ جیسون(فراخوان دور.پاسخ خطا(مقدار.مقدار صحیح(۲)، فراخوان دور.خطای جدید(-۳۲۰۰۰، "سرور مشغول است")))
    با داده := فراخوان دور.خطا با داده(فراخوان دور.کد پارامترهای نامعتبر، "بد"، مقدار.مقدار رشته("x"))
    سرچاپ با داده.has_data، فراخوان دور.خطای سطح بالای جیسون(فراخوان دور.خطای استاندارد(فراخوان دور.کد خطای تجزیه))

    ر := فراخوان دور.کدگشایی پاسخ جیسون(`{"jsonrpc":"2.0","result":3.5,"id":1}`، سالم)
    سرچاپ سالم، فراخوان دور.نتیجه اعشاری(ر)، فراخوان دور.پاسخ خطاست(ر)
    ر۲ := فراخوان دور.کدگشایی پاسخ جیسون(`{"jsonrpc":"2.0","error":{"code":-32601,"message":"nope"},"id":2}`، سالم)
    سرچاپ فراخوان دور.پاسخ خطاست(ر۲)، فراخوان دور.کد خطا(ر۲)، فراخوان دور.پیام خطا(ر۲)
    همه := فراخوان دور.کدگشایی پاسخ‌های جیسون(`[{"jsonrpc":"2.0","result":true,"id":1},{"jsonrpc":"2.0","result":"x","id":2}]`، سالم)
    سرچاپ همه.is_batch، همه.items.طول()، فراخوان دور.نتیجه بولی(همه.items[۰])، فراخوان دور.نتیجه متنی(همه.items[۱])
    سرچاپ فراخوان دور.کدگذاری پاسخ‌های جیسون(همه)

    سرچاپ فراخوان دور.نام کدک(فراخوان دور.کدک جیسون)، فراخوان دور.نام کدک(فراخوان دور.کدک مسگ‌پک)
    سرچاپ فراخوان دور.قاب‌بندی پیش‌فرض کدک(فراخوان دور.کدک جیسون) == فراخوان دور.قاب خطی، فراخوان دور.قاب‌بندی پیش‌فرض کدک(فراخوان دور.کدک مسگ‌پک) == فراخوان دور.قاب طول‌دار
    م := فراخوان دور.کدگذاری درخواست(فراخوان دور.کدک مسگ‌پک، د)
    سرچاپ م.len، فشرده سازی.دریافت بایت(م، ۰)
    دسته := فراخوان دور.کدگشایی دسته(فراخوان دور.کدک مسگ‌پک، م)
    سرچاپ دسته.ok، دسته.items[۰].method، دسته.items[۰].msgid
    سرچاپ فراخوان دور.کدگشایی دسته مسگ‌پک(فراخوان دور.کدگذاری درخواست مسگ‌پک(د)).items[۰].method
    مپ := فراخوان دور.کدگذاری پاسخ مسگ‌پک(فراخوان دور.پاسخ جدید(مقدار.مقدار صحیح(۱)، مقدار.مقدار صحیح(۴۲)))
    سرچاپ فراخوان دور.نتیجه عددی(فراخوان دور.کدگشایی پاسخ مسگ‌پک(مپ، سالم))، سالم
    ج := فراخوان دور.کدگذاری درخواست(فراخوان دور.کدک جیسون، د)
    سرچاپ فراخوان دور.نتیجه عددی(فراخوان دور.کدگشایی پاسخ(فراخوان دور.کدک مسگ‌پک، مپ، سالم))، ج.len > ۰
    سرچاپ فشرده سازی.بافر به رشته(فراخوان دور.کدگذاری پاسخ‌ها(فراخوان دور.کدک جیسون، همه)).طول() > ۰
    سرچاپ فشرده سازی.بافر به رشته(فراخوان دور.کدگذاری خطای سطح بالا(فراخوان دور.کدک جیسون، خطا))
    سرچاپ فراخوان دور.نوع درخواست مسگ‌پک، فراخوان دور.نوع پاسخ مسگ‌پک، فراخوان دور.نوع اعلان مسگ‌پک
    سرچاپ فراخوان دور.کد درخواست نامعتبر، فراخوان دور.کد خطای داخلی، فراخوان دور.کد خطای کارساز
    سرچاپ فراخوان دور.نوع درخواست، فراخوان دور.نوع اعلان، فراخوان دور.نوع پاسخ
    سرچاپ فشرده سازی.بافر به رشته(فشرده سازی.بافر از رشته(فراخوان دور.کدگذاری درخواست جیسون(د))).طول() > ۰
پایان
خروجی{"jsonrpc": "2.0", "id": 1, "method": "calc", "params": [2, "سلام", 1.5, true]} 4 2 سلام 1.5 true false 2 2 {"jsonrpc": "2.0", "id": "req-1", "method": "greet", "params": {"name": "علی"}} علی true {"jsonrpc": "2.0", "method": "tick", "params": []} true add 9 2 {"jsonrpc": "2.0", "id": 1, "result": "ok"} -32601 Method not found {"jsonrpc": "2.0", "error": {"message": "سرور مشغول است", "code": -32000}, "id": 2} true {"jsonrpc": "2.0", "error": {"message": "Parse error", "code": -32700}, "id": null} true 3.5 false true -32601 nope true 2 true x [{"jsonrpc": "2.0", "id": 1, "result": true}, {"jsonrpc": "2.0", "id": 2, "result": "x"}] json-rpc-2.0 msgpack-rpc true true 29 148 true calc 1 calc 42 true 42 true true {"jsonrpc": "2.0", "error": {"message": "Method not found", "code": -32601}, "id": null} 0 1 2 -32600 -32603 -32000 1 2 3 true

درخواست Request

ساختار درخواست
یک درخواست.
نامانگلیسیگونهتوضیح
methodmethodرشته = ""نام متد.
paramsparamsvalue.Valueپارامترها: آرایه یا شیء.
has_paramshas_paramsمنطقی = نادرستپارامتر دارد.
ididvalue.Valueشناسه؛ عدد یا رشته.
has_idhas_idمنطقی = نادرستشناسه دارد؛ بدون آن اعلان است.
msgidmsgidصحیح۶۴ = 0شناسه‌ی عددی.
err_codeerr_codeصحیح = 0اگر درخواست خوانده نشد، کد خطا.
err_messageerr_messageرشته = ""پیام آن خطا.
rpc-Methods.salam
واردسازی فراخوان دور
واردسازی کدگذاری.مقدار

روال جمع(ج: صحیح۶۴):
    الف := فراخوان دور.پارامتر عددی فراخوان(ج، "a"، ۰)
    ب := فراخوان دور.پارامتر عددی فراخوان(ج، "b"، ۱)
    فراخوان دور.پاسخ عددی(ج، الف + ب)
پایان

روال تقسیم(ج: صحیح۶۴):
    مقسوم‌علیه := فراخوان دور.پارامتر اعشاری فراخوان(ج، "b"، ۱)
    اگر مقسوم‌علیه == ۰.۰:
        فراخوان دور.پارامتر نامعتبر(ج، "تقسیم بر صفر")
        برگشت
    پایان
    فراخوان دور.پاسخ اعشاری(ج، فراخوان دور.پارامتر اعشاری فراخوان(ج، "a"، ۰) / مقسوم‌علیه)
پایان

روال سلام(ج: صحیح۶۴):
    نام := فراخوان دور.پارامتر متنی فراخوان(ج، "name"، ۰)
    اگر نام.طول() == ۰:
        فراخوان دور.شکست(ج، -۳۲۰۰۱، "نام لازم است")
        برگشت
    پایان
    فراخوان دور.پاسخ متنی(ج، "سلام " + نام)
پایان

روال وضعیت(ج: صحیح۶۴):
    ناپایا ش := مقدار.آرایه جدید()
    مقدار.افزودن به آرایه(ش، مقدار.مقدار رشته(فراخوان دور.نام متد فراخوان(ج)))
    مقدار.افزودن به آرایه(ش، مقدار.مقدار صحیح(فراخوان دور.تعداد پارامتر فراخوان(ج)))
    مقدار.افزودن به آرایه(ش، مقدار.مقدار منطقی(فراخوان دور.پارامتر بولی فراخوان(ج، "verbose"، ۰)))
    فراخوان دور.پاسخ دادن(ج، ش)
پایان

روال ثبت رویداد(ج: صحیح۶۴):
    سرچاپ "رویداد:"، مقدار.به رشته(فراخوان دور.پارامتر فراخوان(ج، "event"، ۰))، فراخوان دور.فراخوان اعلان است(ج)
    _ := فراخوان دور.پارامترهای فراخوان(ج)
    _ := فراخوان دور.درخواست فراخوان(ج)
    فراخوان دور.پاسخ تهی(ج)
پایان

روال ممنوع(ج: صحیح۶۴):
    فراخوان دور.شکست با داده(ج، -۳۲۰۰۳، "دسترسی ندارید"، مقدار.مقدار رشته("admin"))
پایان

روال همیشه(ج: صحیح۶۴):
    فراخوان دور.پاسخ بولی(ج، درست)
پایان

روال ریشه:
    فراخوان دور.ثبت متد با توضیح("add"، جمع، "جمع دو عدد")
    فراخوان دور.ثبت متد("divide"، تقسیم)
    فراخوان دور.ثبت متد("hello"، سلام)
    فراخوان دور.ثبت متد("status"، وضعیت)
    فراخوان دور.ثبت متد("log"، ثبت رویداد)
    فراخوان دور.ثبت متد("admin"، ممنوع)
    فراخوان دور.ثبت متد("ping"، همیشه)
    سرچاپ فراخوان دور.تعداد متدها()، فراخوان دور.متد دارد("add")، فراخوان دور.توضیح متد("add")
    سرچاپ فراخوان دور.فهرست متدها().طول()

    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"add","params":[2,40],"id":1}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"add","params":{"a":5,"b":6},"id":2}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"divide","params":[1,0],"id":3}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"hello","params":["مریم"],"id":"x"}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"hello","params":[],"id":4}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"status","params":{"verbose":true},"id":5}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"admin","id":6}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"nope","id":7}`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":"2.0","method":"log","params":{"event":"start"}}`).طول()
    سرچاپ فراخوان دور.پردازش متن(`[{"jsonrpc":"2.0","method":"ping","id":8},{"jsonrpc":"2.0","method":"add","params":[1,1],"id":9}]`)
    سرچاپ فراخوان دور.پردازش متن(`{"jsonrpc":`)

    ناپایا سالم := نادرست
    د := فراخوان دور.کدگشایی درخواست جیسون(`{"jsonrpc":"2.0","method":"add","params":[20,22],"id":10}`، سالم)
    پ := فراخوان دور.اجرای درخواست(د)
    سرچاپ فراخوان دور.نتیجه عددی(پ)
    دسته := فراخوان دور.کدگشایی دسته جیسون(`[{"jsonrpc":"2.0","method":"ping","id":1}]`)
    سرچاپ فراخوان دور.اجرای دسته(دسته).items.طول()

    سرچاپ فراخوان دور.حذف متد("ping")، فراخوان دور.متد دارد("ping")
    فراخوان دور.بازنشانی ثبت()
    سرچاپ فراخوان دور.تعداد متدها()
پایان
خروجی7 true جمع دو عدد 7 {"jsonrpc": "2.0", "id": 1, "result": 42} {"jsonrpc": "2.0", "id": 2, "result": 11} {"jsonrpc": "2.0", "error": {"message": "تقسیم بر صفر", "code": -32602}, "id": 3} {"jsonrpc": "2.0", "id": "x", "result": "سلام مریم"} {"jsonrpc": "2.0", "error": {"message": "نام لازم است", "code": -32001}, "id": 4} {"jsonrpc": "2.0", "id": 5, "result": ["status", 1, true]} {"jsonrpc": "2.0", "error": {"message": "دسترسی ندارید", "code": -32003, "data": "admin"}, "id": 6} {"jsonrpc": "2.0", "error": {"message": "Method not found", "code": -32601}, "id": 7} رویداد: start true 0 [{"jsonrpc": "2.0", "id": 8, "result": true}, {"jsonrpc": "2.0", "id": 9, "result": 2}] {"jsonrpc": "2.0", "error": {"message": "Parse error", "code": -32700}, "id": null} 42 1 true false 0

پاسخ Response

ساختار پاسخ
یک پاسخ.
نامانگلیسیگونهتوضیح
ididvalue.Valueشناسه‌ی درخواست.
has_idhas_idمنطقی = نادرستشناسه دارد.
resultresultvalue.Valueنتیجه.
is_erroris_errorمنطقی = نادرستخطاست.
errerrخطای فراخوانخطا.
msgidmsgidصحیح۶۴ = 0شناسه‌ی عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

دسته Batch

ساختار دسته
دسته‌ای از درخواست‌ها.
نامانگلیسیگونهتوضیح
itemsitemsوکتور<درخواست>درخواست‌ها.
is_batchis_batchمنطقی = نادرستبه شکل آرایه آمده بود.
okokمنطقی = درستدرست خوانده شد.
errerrخطای فراخواناگر نه، خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ‌ها Responses

ساختار پاسخ‌ها
پاسخ‌های یک دسته.
نامانگلیسیگونهتوضیح
itemsitemsوکتور<پاسخ>پاسخ‌ها.
is_batchis_batchمنطقی = نادرستبه شکل آرایه فرستاده شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

متد Method

ساختار متد
یک متد ثبت‌شده.
نامانگلیسیگونهتوضیح
namenameرشته = ""نام.
fnfnصحیح۶۴ = 0روال.
docdocرشته = ""توضیح.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

جدول متدها MethodTable

ساختار جدول متدها
جدول متدها.
نامانگلیسیگونهتوضیح
itemsitemsوکتور<متد>متدها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

جایگاه فراخوان CallSlot

ساختار جایگاه فراخوان
وضعیت یک فراخوان در حال اجرا.
نامانگلیسیگونهتوضیح
reqreqدرخواستدرخواست.
resultresultvalue.Valueنتیجه.
errerrخطای فراخوانخطا.
is_erroris_errorمنطقی = نادرستخطاست.
repliedrepliedمنطقی = نادرستپاسخ داده شده.
busybusyمنطقی = نادرستدر استفاده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

جدول جایگاه‌ها SlotTable

ساختار جدول جایگاه‌ها
جدول فراخوان‌ها.
نامانگلیسیگونهتوضیح
itemsitemsوکتور<جایگاه فراخوان>فراخوان‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پایاها و متغیرها

نوع درخواست مسگ‌پک RPC_MP_REQUEST

پایا نوع درخواست مسگ‌پک: صحیح۳۲ = 0
نوع پیام MessagePack-RPC: درخواست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نوع پاسخ مسگ‌پک RPC_MP_RESPONSE

پایا نوع پاسخ مسگ‌پک: صحیح۳۲ = 1
نوع پیام: پاسخ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نوع اعلان مسگ‌پک RPC_MP_NOTIFY

پایا نوع اعلان مسگ‌پک: صحیح۳۲ = 2
نوع پیام: اعلان.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

اندازه تکه خواندن RPC_READ_CHUNK

پایا اندازه تکه خواندن: صحیح۳۲ = 4096
اندازه‌ی هر خواندن از سوکت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

بیشینه اندازه قاب RPC_MAX_FRAME

پایا بیشینه اندازه قاب: صحیح۳۲ = 33554432
بیشترین اندازه‌ی یک قاب: ۳۲ مگابایت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

کد خطای تجزیه RPC_PARSE_ERROR

پایا کد خطای تجزیه: صحیح۳۲ = -32700
کد خطا: متن جیسون خوانده نشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کد درخواست نامعتبر RPC_INVALID_REQUEST

پایا کد درخواست نامعتبر: صحیح۳۲ = -32600
کد خطا: درخواست قالب درستی ندارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کد روش یافت نشد RPC_METHOD_NOT_FOUND

پایا کد روش یافت نشد: صحیح۳۲ = -32601
کد خطا: متد ثبت نشده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کد پارامترهای نامعتبر RPC_INVALID_PARAMS

پایا کد پارامترهای نامعتبر: صحیح۳۲ = -32602
کد خطا: پارامترها نادرست‌اند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کد خطای داخلی RPC_INTERNAL_ERROR

پایا کد خطای داخلی: صحیح۳۲ = -32603
کد خطا: خطای داخلی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کد خطای کارساز RPC_SERVER_ERROR

پایا کد خطای کارساز: صحیح۳۲ = -32000
آغاز بازه‌ی کدهای خطای ویژه‌ی سرور: ۳۲۰۰۰- تا ۳۲۰۹۹-.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نوع درخواست RPC_KIND_REQUEST

پایا نوع درخواست: صحیح۳۲ = 1
نوع پیام: درخواست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نوع اعلان RPC_KIND_NOTIFICATION

پایا نوع اعلان: صحیح۳۲ = 2
نوع پیام: اعلان.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نوع پاسخ RPC_KIND_RESPONSE

پایا نوع پاسخ: صحیح۳۲ = 3
نوع پیام: پاسخ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدک جیسون RPC_CODEC_JSON

پایا کدک جیسون: صحیح۳۲ = 0
کدک JSON-RPC 2.0.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدک مسگ‌پک RPC_CODEC_MSGPACK

پایا کدک مسگ‌پک: صحیح۳۲ = 1
کدک MessagePack-RPC.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

قاب خطی RPC_FRAME_LINE

پایا قاب خطی: صحیح۳۲ = 0
قاب‌بندی: هر پیام در یک خط.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

قاب سرآیندی RPC_FRAME_HEADER

پایا قاب سرآیندی: صحیح۳۲ = 1
قاب‌بندی: سرآیند Content-Length، مثل LSP.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

قاب طول‌دار RPC_FRAME_LENGTH

پایا قاب طول‌دار: صحیح۳۲ = 2
قاب‌بندی: طول ۴ بایتی پیش از هر پیام.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

روال‌ها

کدگذاری درخواست جیسون JsonEncodeRequest

روال کدگذاری درخواست جیسون(r: درخواست): رشته
درخواست به متن JSON-RPC.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگذاری پاسخ جیسون JsonEncodeResponse

روال کدگذاری پاسخ جیسون(r: پاسخ): رشته
پاسخ به متن JSON-RPC.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگذاری پاسخ‌های جیسون JsonEncodeResponses

روال کدگذاری پاسخ‌های جیسون(rs: پاسخ‌ها): رشته
پاسخ‌ها، یکی یا آرایه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگشایی دسته جیسون JsonDecodeBatch

روال کدگشایی دسته جیسون(text: رشته): دسته
متن را به دسته‌ی درخواست‌ها برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

کدگشایی درخواست جیسون JsonDecodeRequest

روال کدگشایی درخواست جیسون(text: رشته، ok &: منطقی): درخواست
یک درخواست را کدگشایی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

کدگشایی پاسخ جیسون JsonDecodeResponse

روال کدگشایی پاسخ جیسون(text: رشته، ok &: منطقی): پاسخ
یک پاسخ را کدگشایی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگشایی پاسخ‌های جیسون JsonDecodeResponses

روال کدگشایی پاسخ‌های جیسون(text: رشته، ok &: منطقی): پاسخ‌ها
پاسخ یا آرایه‌ی پاسخ‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

خطای سطح بالای جیسون JsonTopLevelError

روال خطای سطح بالای جیسون(e: خطای فراخوان): رشته
پاسخ خطای JSON-RPC با شناسه‌ی تهی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

ثبت متد Register

روال ثبت متد(name: رشته، fn: صحیح۶۴)
روالی را برای یک متد ثبت می‌کند؛ روال شماره‌ی فراخوان را می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

ثبت متد با توضیح RegisterDoc

روال ثبت متد با توضیح(name: رشته، fn: صحیح۶۴، doc: رشته)
مثل روال بالا، با توضیح.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

حذف متد Unregister

روال حذف متد(name: رشته): منطقی
متد را حذف می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

متد دارد HasMethod

روال متد دارد(name: رشته): منطقی
متد ثبت شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

تعداد متدها MethodCount

روال تعداد متدها(): صحیح
شمار متدها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

فهرست متدها ListMethods

روال فهرست متدها(): وکتور<رشته>
نام همه‌ی متدها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

توضیح متد MethodDoc

روال توضیح متد(name: رشته): رشته
توضیح یک متد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

بازنشانی ثبت ResetRegistry

روال بازنشانی ثبت()
همه‌ی متدها را حذف می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

درخواست فراخوان CallRequest

روال درخواست فراخوان(slot: صحیح۶۴): درخواست
درخواست فراخوان جاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

نام متد فراخوان CallMethodName

روال نام متد فراخوان(slot: صحیح۶۴): رشته
نام متد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامترهای فراخوان CallParams

روال پارامترهای فراخوان(slot: صحیح۶۴): value.Value
همه‌ی پارامترها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

فراخوان اعلان است CallIsNotification

روال فراخوان اعلان است(slot: صحیح۶۴): منطقی
فراخوان اعلان است و پاسخش فرستاده نمی‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

تعداد پارامتر فراخوان CallParamCount

روال تعداد پارامتر فراخوان(slot: صحیح۶۴): صحیح
شمار پارامترها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر فراخوان CallParam

روال پارامتر فراخوان(slot: صحیح۶۴، key: رشته، pos: صحیح): value.Value
پارامتر با نام یا جایگاه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر عددی فراخوان CallParamInt

روال پارامتر عددی فراخوان(slot: صحیح۶۴، key: رشته، pos: صحیح): صحیح۶۴
پارامتر عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر اعشاری فراخوان CallParamFloat

روال پارامتر اعشاری فراخوان(slot: صحیح۶۴، key: رشته، pos: صحیح): اعشار۶۴
پارامتر اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر متنی فراخوان CallParamStr

روال پارامتر متنی فراخوان(slot: صحیح۶۴، key: رشته، pos: صحیح): رشته
پارامتر متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر بولی فراخوان CallParamBool

روال پارامتر بولی فراخوان(slot: صحیح۶۴، key: رشته، pos: صحیح): منطقی
پارامتر بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ دادن Reply

روال پاسخ دادن(slot: صحیح۶۴، result: value.Value)
با یک مقدار پاسخ می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ عددی ReplyInt

روال پاسخ عددی(slot: صحیح۶۴، n: صحیح۶۴)
پاسخ عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ اعشاری ReplyFloat

روال پاسخ اعشاری(slot: صحیح۶۴، n: اعشار۶۴)
پاسخ اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ متنی ReplyStr

روال پاسخ متنی(slot: صحیح۶۴، s: رشته)
پاسخ متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ بولی ReplyBool

روال پاسخ بولی(slot: صحیح۶۴، b: منطقی)
پاسخ بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ تهی ReplyNull

روال پاسخ تهی(slot: صحیح۶۴)
پاسخ تهی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

شکست Fail

روال شکست(slot: صحیح۶۴، code: صحیح، message: رشته)
با خطا پاسخ می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

شکست با داده FailWithData

روال شکست با داده(slot: صحیح۶۴، code: صحیح، message: رشته، data: value.Value)
خطا با داده‌ی اضافه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر نامعتبر FailInvalidParams

روال پارامتر نامعتبر(slot: صحیح۶۴، message: رشته)
خطای پارامتر نامعتبر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

اجرای درخواست Invoke

روال اجرای درخواست(req: درخواست): پاسخ
یک درخواست را با متدهای ثبت‌شده اجرا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

سرور جدید NewServer

روال سرور جدید(port: صحیح، codec: صحیح): سرور فراخوان
سرور تازه با درگاه و کدک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

تنظیم قاب‌بندی SetFraming

روال تنظیم قاب‌بندی(s &: سرور فراخوان، framing: صحیح)
قاب‌بندی سرور.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

اجرای دسته InvokeBatch

روال اجرای دسته(b: دسته): پاسخ‌ها
همه‌ی درخواست‌های یک دسته را اجرا می‌کند؛ اعلان‌ها پاسخی ندارند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پردازش بار HandlePayload

روال پردازش بار(codec: صحیح، payload: compress.ByteBuf): compress.ByteBuf
یک بار کامل را پردازش می‌کند و پاسخ کدگذاری‌شده را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

پردازش متن HandleText

روال پردازش متن(text: رشته): رشته
یک متن JSON-RPC را پردازش می‌کند و پاسخ را برمی‌گرداند؛ برای اعلان‌ها رشته‌ی خالی. برای قرار دادن RPC پشت یک مسیر HTTP.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

خدمت به اتصال ServeConn

روال خدمت به اتصال(fd: صحیح۶۴، codec: صحیح، framing: صحیح): صحیح
به یک اتصال تا بسته شدنش پاسخ می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

گوش دادن Listen

روال گوش دادن(s &: سرور فراخوان): منطقی
گوش دادن را آغاز می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

درگاه سرور Port

روال درگاه سرور(s: سرور فراخوان): صحیح
درگاهی که واقعاً گرفته شد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

خدمت به تعداد ServeCount

روال خدمت به تعداد(s &: سرور فراخوان، n: صحیح): صحیح
به n اتصال پاسخ می‌دهد و برمی‌گردد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

خدمت Serve

روال خدمت(s &: سرور فراخوان)
تا توقف به اتصال‌ها پاسخ می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

توقف سرور StopServer

روال توقف سرور(s &: سرور فراخوان)
سرور را متوقف می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

خدمت ورودی خروجی ServeStdio

روال خدمت ورودی خروجی(framing: صحیح): صحیح
درخواست‌ها را از ورودی استاندارد می‌خواند و پاسخ را در خروجی می‌نویسد؛ مثل سرورهای زبان (LSP).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

کدگذاری درخواست مسگ‌پک MsgpackEncodeRequest

روال کدگذاری درخواست مسگ‌پک(r: درخواست): compress.ByteBuf
درخواست را به MessagePack-RPC کدگذاری می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگذاری پاسخ مسگ‌پک MsgpackEncodeResponse

روال کدگذاری پاسخ مسگ‌پک(r: پاسخ): compress.ByteBuf
پاسخ را به MessagePack-RPC کدگذاری می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگشایی دسته مسگ‌پک MsgpackDecodeBatch

روال کدگشایی دسته مسگ‌پک(b: compress.ByteBuf): دسته
پیام MessagePack-RPC را به دسته‌ی درخواست‌ها برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگشایی پاسخ مسگ‌پک MsgpackDecodeResponse

روال کدگشایی پاسخ مسگ‌پک(b: compress.ByteBuf، ok &: منطقی): پاسخ
پاسخ MessagePack-RPC را کدگشایی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

جریان جدید NewStream

روال جریان جدید(fd: صحیح۶۴): جریان
جریان روی یک سوکت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

جریان حافظه NewMemStream

روال جریان حافظه(): جریان
جریان در حافظه؛ برای آزمایش و پردازش داده‌ی آماده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

آزادسازی جریان FreeStream

روال آزادسازی جریان(s &: جریان)
جریان را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

تغذیه متن FeedStr

روال تغذیه متن(s &: جریان، text: رشته)
متن را به جریان حافظه می‌افزاید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

تغذیه بافر FeedBuf

روال تغذیه بافر(s &: جریان، b: compress.ByteBuf)
بافر را به جریان حافظه می‌افزاید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

باقی‌مانده جریان StreamPending

روال باقی‌مانده جریان(s: جریان): صحیح
بایت‌های خوانده‌نشده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

جریان بسته StreamClosed

روال جریان بسته(s: جریان): منطقی
جریان بسته است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

قاب‌بندی FrameEncode

روال قاب‌بندی(kind: صحیح، payload: compress.ByteBuf): compress.ByteBuf
بار را با قاب‌بندی داده‌شده قاب می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

قاب‌بندی متن FrameEncodeStr

روال قاب‌بندی متن(kind: صحیح، payload: رشته): compress.ByteBuf
متن را قاب می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

خواندن قاب ReadFrame

روال خواندن قاب(s &: جریان، kind: صحیح، ok &: منطقی): compress.ByteBuf
قاب بعدی را می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

خواندن قاب متنی ReadFrameStr

روال خواندن قاب متنی(s &: جریان، kind: صحیح، ok &: منطقی): رشته
قاب بعدی را به شکل متن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Frames.salam

نوشتن قاب WriteFrame

روال نوشتن قاب(fd: صحیح۶۴، kind: صحیح، payload: compress.ByteBuf): منطقی
قاب را روی سوکت می‌نویسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

نوشتن قاب متنی WriteFrameStr

روال نوشتن قاب متنی(fd: صحیح۶۴، kind: صحیح، payload: رشته): منطقی
متن را قاب کرده روی سوکت می‌نویسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

اتصال کارخواه DialClient

روال اتصال کارخواه(host: رشته، port: صحیح، codec: صحیح): کارخواه
به سرور RPC با کدک داده‌شده وصل می‌شود؛ قاب‌بندی پیش‌فرض همان کدک به کار می‌رود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

کارخواه از توصیف‌گر ClientFromFd

روال کارخواه از توصیف‌گر(fd: صحیح۶۴، codec: صحیح): کارخواه
کارخواه روی یک سوکت باز.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Serve.salam

تنظیم قاب‌بندی کارخواه ClientSetFraming

روال تنظیم قاب‌بندی کارخواه(c &: کارخواه، framing: صحیح)
قاب‌بندی کارخواه را عوض می‌کند؛ باید با سرور یکی باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

کارخواه معتبر ClientOk

روال کارخواه معتبر(c: کارخواه): منطقی
کارخواه سالم است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

خطای کارخواه ClientError

روال خطای کارخواه(c: کارخواه): رشته
آخرین خطای کارخواه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

بستن کارخواه CloseClient

روال بستن کارخواه(c &: کارخواه)
اتصال را می‌بندد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

فراخوان Call

روال فراخوان(c &: کارخواه، method: رشته، params: value.Value): پاسخ
متد را با پارامترها صدا می‌زند و منتظر پاسخ می‌ماند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

فراخوان بدون پارامتر CallNoParams

روال فراخوان بدون پارامتر(c &: کارخواه، method: رشته): پاسخ
متد بی‌پارامتر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

فراخوان با آرگومان CallArgs

روال فراخوان با آرگومان(c &: کارخواه، method: رشته، args: وکتور<value.Value>): پاسخ
متد با فهرست آرگومان‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

اعلان Notify

روال اعلان(c &: کارخواه، method: رشته، params: value.Value): منطقی
اعلان می‌فرستد؛ پاسخی نمی‌آید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

فراخوان دسته‌ای CallBatch

روال فراخوان دسته‌ای(c &: کارخواه، reqs: وکتور<درخواست>): پاسخ‌ها
چند درخواست را یک‌جا می‌فرستد و پاسخ‌ها را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

نتیجه عددی ResultInt

روال نتیجه عددی(r: پاسخ): صحیح۶۴
نتیجه‌ی عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

نتیجه اعشاری ResultFloat

روال نتیجه اعشاری(r: پاسخ): اعشار۶۴
نتیجه‌ی اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نتیجه متنی ResultStr

روال نتیجه متنی(r: پاسخ): رشته
نتیجه‌ی متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نتیجه بولی ResultBool

روال نتیجه بولی(r: پاسخ): منطقی
نتیجه‌ی بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

پاسخ خطاست IsErrorResponse

روال پاسخ خطاست(r: پاسخ): منطقی
پاسخ خطاست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کد خطا ErrorCode

روال کد خطا(r: پاسخ): صحیح
کد خطای پاسخ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

پیام خطا ErrorMessage

روال پیام خطا(r: پاسخ): رشته
پیام خطای پاسخ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

فراخوان اچ تی تی پی CallHTTP

روال فراخوان اچ تی تی پی(url: رشته، method: رشته، params: value.Value، id: صحیح۶۴): پاسخ
درخواست JSON-RPC را با POST به نشانی HTTP می‌فرستد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Client.salam

خطای جدید NewError

روال خطای جدید(code: صحیح، message: رشته): خطای فراخوان
خطا با کد و پیام.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

خطای استاندارد StdError

روال خطای استاندارد(code: صحیح): خطای فراخوان
خطای استاندارد با پیام پیش‌فرض آن کد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

خطا با داده ErrorWithData

روال خطا با داده(code: صحیح، message: رشته، data: value.Value): خطای فراخوان
خطا با داده‌ی اضافه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

درخواست جدید NewRequest

روال درخواست جدید(method: رشته، params: value.Value، id: صحیح۶۴): درخواست
درخواست با شناسه‌ی عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

درخواست با شناسه متنی NewRequestStrId

روال درخواست با شناسه متنی(method: رشته، params: value.Value، id: رشته): درخواست
درخواست با شناسه‌ی متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

اعلان جدید NewNotification

روال اعلان جدید(method: رشته، params: value.Value): درخواست
اعلان، یعنی درخواستی که پاسخ نمی‌خواهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

اعلان است IsNotification

روال اعلان است(r: درخواست): منطقی
اعلان است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پاسخ جدید NewResponse

روال پاسخ جدید(id: value.Value، result: value.Value): پاسخ
پاسخ با نتیجه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

پاسخ خطا NewErrorResponse

روال پاسخ خطا(id: value.Value، e: خطای فراخوان): پاسخ
پاسخ خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

تعداد پارامتر ParamCount

روال تعداد پارامتر(r: درخواست): صحیح
شمار پارامترها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر در جایگاه ParamAt

روال پارامتر در جایگاه(r: درخواست، i: صحیح): value.Value
پارامتر در این جایگاه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

پارامتر نام‌دار ParamNamed

روال پارامتر نام‌دار(r: درخواست، key: رشته): value.Value
پارامتر با این نام.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

پارامتر Param

روال پارامتر(r: درخواست، key: رشته، pos: صحیح): value.Value
پارامتر با نام، یا اگر پارامترها آرایه‌اند، با جایگاه؛ برای پذیرفتن هر دو شکل.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر عددی ParamInt

روال پارامتر عددی(r: درخواست، key: رشته، pos: صحیح): صحیح۶۴
پارامتر عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر اعشاری ParamFloat

روال پارامتر اعشاری(r: درخواست، key: رشته، pos: صحیح): اعشار۶۴
پارامتر اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر متنی ParamStr

روال پارامتر متنی(r: درخواست، key: رشته، pos: صحیح): رشته
پارامتر متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر بولی ParamBool

روال پارامتر بولی(r: درخواست، key: رشته، pos: صحیح): منطقی
پارامتر بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

پارامتر دارد HasParam

روال پارامتر دارد(r: درخواست، key: رشته، pos: صحیح): منطقی
پارامتر آمده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

نام کدک CodecName

روال نام کدک(codec: صحیح): رشته
نام کدک، مثل json-rpc-2.0.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

قاب‌بندی پیش‌فرض کدک CodecDefaultFraming

روال قاب‌بندی پیش‌فرض کدک(codec: صحیح): صحیح
قاب‌بندی پیش‌فرض کدک: خطی برای جیسون و طول‌دار برای MessagePack.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگذاری درخواست EncodeRequest

روال کدگذاری درخواست(codec: صحیح، r: درخواست): compress.ByteBuf
درخواست را با کدک داده‌شده کدگذاری می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگذاری پاسخ‌ها EncodeResponses

روال کدگذاری پاسخ‌ها(codec: صحیح، rs: پاسخ‌ها): compress.ByteBuf
پاسخ‌ها را کدگذاری می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگشایی دسته DecodeBatch

روال کدگشایی دسته(codec: صحیح، payload: compress.ByteBuf): دسته
بار دریافتی را به دسته‌ی درخواست‌ها برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Methods.salam

کدگشایی پاسخ DecodeResponse

روال کدگشایی پاسخ(codec: صحیح، payload: compress.ByteBuf، ok &: منطقی): پاسخ
پاسخ را کدگشایی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam

کدگذاری خطای سطح بالا EncodeTopLevelError

روال کدگذاری خطای سطح بالا(codec: صحیح، e: خطای فراخوان): compress.ByteBuf
پاسخ خطا بدون شناسه، برای وقتی که درخواست خوانده نشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: rpc-Messages.salam