CINXE.COM

erpc module - github.com/andeya/erpc/v7 - Go Packages

<!DOCTYPE html> <html lang="en" data-layout="responsive" data-local=""> <head> <script> window.addEventListener('error', window.__err=function f(e){f.p=f.p||[];f.p.push(e)}); </script> <script> (function() { const theme = document.cookie.match(/prefers-color-scheme=(light|dark|auto)/)?.[1] if (theme) { document.querySelector('html').setAttribute('data-theme', theme); } }()) </script> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta class="js-gtmID" data-gtmid="GTM-W8MVQXG"> <link rel="shortcut icon" href="/static/shared/icon/favicon.ico"> <link rel="canonical" href="https://pkg.go.dev/github.com/andeya/erpc/v7"> <link href="/static/frontend/frontend.min.css?version=prod-frontend-00098-h5t" rel="stylesheet"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Go Packages"> <title>erpc module - github.com/andeya/erpc/v7 - Go Packages</title> <link href="/static/frontend/unit/unit.min.css?version=prod-frontend-00098-h5t" rel="stylesheet"> <link href="/static/frontend/unit/main/main.min.css?version=prod-frontend-00098-h5t" rel="stylesheet"> </head> <body> <script> function loadScript(src, mod = true) { let s = document.createElement('script'); s.src = src; if (mod) { s.type = 'module'; s.async = true; s.defer = true } document.head.appendChild(s); } loadScript("/third_party/dialog-polyfill/dialog-polyfill.js", false) loadScript("/static/frontend/frontend.js"); </script> <header class="go-Header go-Header--full js-siteHeader"> <div class="go-Header-inner go-Header-inner--dark"> <nav class="go-Header-nav"> <a href="https://go.dev/" class="js-headerLogo" data-gtmc="nav link" data-test-id="go-header-logo-link" role="heading" aria-level="1"> <img class="go-Header-logo" src="/static/shared/logo/go-white.svg" alt="Go"> </a> <div class="skip-navigation-wrapper"> <a class="skip-to-content-link" aria-label="Skip to main content" href="#main-content"> Skip to Main Content </a> </div> <div class="go-Header-rightContent"> <div class="go-SearchForm js-searchForm"> <form class="go-InputGroup go-ShortcutKey go-SearchForm-form" action="/search" data-shortcut="/" data-shortcut-alt="search" data-gtmc="search form" aria-label="Search for a package" role="search" > <input name="q" class="go-Input js-searchFocus" aria-label="Search for a package" type="search" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" placeholder="Search packages or symbols" value="" /> <input name="m" value="" hidden> <button class="go-Button go-Button--inverted" aria-label="Submit search"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/search_gm_grey_24dp.svg" alt="" /> </button> </form> <button class="go-SearchForm-expandSearch js-expandSearch" data-gtmc="nav button" aria-label="Open search" data-test-id="expand-search"> <img class="go-Icon go-Icon--inverted" height="24" width="24" src="/static/shared/icon/search_gm_grey_24dp.svg" alt=""> </button> </div> <ul class="go-Header-menu"> <li class="go-Header-menuItem"> <a class="js-desktop-menu-hover" href="#" data-gtmc="nav link"> Why Go <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg" alt="submenu dropdown icon"> </a> <ul class="go-Header-submenu go-Header-submenu--why js-desktop-submenu-hover" aria-label="submenu"> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/solutions#case-studies"> <span>Case Studies</span> </a> </div> <p>Common problems companies solve with Go</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/solutions#use-cases"> <span>Use Cases</span> </a> </div> <p>Stories about how and why companies use Go</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/security/"> <span>Security</span> </a> </div> <p>How Go can help keep you secure by default</p> </li> </ul> </li> <li class="go-Header-menuItem"> <a href="https://go.dev/learn/" data-gtmc="nav link">Learn</a> </li> <li class="go-Header-menuItem"> <a class="js-desktop-menu-hover" href="#" data-gtmc="nav link"> Docs <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg" alt="submenu dropdown icon"> </a> <ul class="go-Header-submenu go-Header-submenu--docs js-desktop-submenu-hover" aria-label="submenu"> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/doc/effective_go"> <span>Effective Go</span> </a> </div> <p>Tips for writing clear, performant, and idiomatic Go code</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/doc/"> <span>Go User Manual</span> </a> </div> <p>A complete introduction to building software with Go</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://pkg.go.dev/std"> <span>Standard library</span> </a> </div> <p>Reference documentation for Go's standard library</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/doc/devel/release"> <span>Release Notes</span> </a> </div> <p>Learn what's new in each Go release</p> </li> </ul> </li> <li class="go-Header-menuItem go-Header-menuItem--active"> <a href="/" data-gtmc="nav link">Packages</a> </li> <li class="go-Header-menuItem"> <a class="js-desktop-menu-hover" href="#" data-gtmc="nav link"> Community <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_drop_down_gm_grey_24dp.svg" alt="submenu dropdown icon"> </a> <ul class="go-Header-submenu go-Header-submenu--community js-desktop-submenu-hover" aria-label="submenu"> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/talks/"> <span>Recorded Talks</span> </a> </div> <p>Videos from prior events</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://www.meetup.com/pro/go"> <span>Meetups</span> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/launch_gm_grey_24dp.svg" alt=""> </i> </a> </div> <p>Meet other local Go developers</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://github.com/golang/go/wiki/Conferences"> <span>Conferences</span> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/launch_gm_grey_24dp.svg" alt=""> </i> </a> </div> <p>Learn and network with Go developers from around the world</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/blog"> <span>Go blog</span> </a> </div> <p>The Go project's official blog.</p> </li> <li class="go-Header-submenuItem"> <div> <a href="https://go.dev/help"> <span>Go project</span> </a> </div> <p>Get help and stay informed from Go</p> </li> <li class="go-Header-submenuItem"> <div> Get connected </div> <p></p> <div class="go-Header-socialIcons"> <a class="go-Header-socialIcon" aria-label="Get connected with google-groups (Opens in new window)" title="Get connected with google-groups (Opens in new window)" href="https://groups.google.com/g/golang-nuts"> <img src="/static/shared/logo/social/google-groups.svg" /> </a> <a class="go-Header-socialIcon" aria-label="Get connected with github (Opens in new window)" title="Get connected with github (Opens in new window)" href="https://github.com/golang"> <img src="/static/shared/logo/social/github.svg" /> </a> <a class="go-Header-socialIcon" aria-label="Get connected with twitter (Opens in new window)" title="Get connected with twitter (Opens in new window)" href="https://twitter.com/golang"> <img src="/static/shared/logo/social/twitter.svg" /> </a> <a class="go-Header-socialIcon" aria-label="Get connected with reddit (Opens in new window)" title="Get connected with reddit (Opens in new window)" href="https://www.reddit.com/r/golang/"> <img src="/static/shared/logo/social/reddit.svg" /> </a> <a class="go-Header-socialIcon" aria-label="Get connected with slack (Opens in new window)" title="Get connected with slack (Opens in new window)" href="https://invite.slack.golangbridge.org/"> <img src="/static/shared/logo/social/slack.svg" /> </a> <a class="go-Header-socialIcon" aria-label="Get connected with stack-overflow (Opens in new window)" title="" href="https://stackoverflow.com/collectives/go"> <img src="/static/shared/logo/social/stack-overflow.svg" /> </a> </div> </li> </ul> </li> </ul> <button class="go-Header-navOpen js-headerMenuButton go-Header-navOpen--white" data-gtmc="nav button" aria-label="Open navigation"> </button> </div> </nav> </div> </header> <aside class="go-NavigationDrawer js-header"> <nav class="go-NavigationDrawer-nav"> <div class="go-NavigationDrawer-header"> <a href="https://go.dev/"> <img class="go-NavigationDrawer-logo" src="/static/shared/logo/go-blue.svg" alt="Go."> </a> </div> <ul class="go-NavigationDrawer-list"> <li class="go-NavigationDrawer-listItem js-mobile-subnav-trigger go-NavigationDrawer-hasSubnav"> <a href="#"> <span>Why Go</span> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/navigate_next_gm_grey_24dp.svg" alt=""> </i> </a> <div class="go-NavigationDrawer go-NavigationDrawer-submenuItem"> <div class="go-NavigationDrawer-nav"> <div class="go-NavigationDrawer-header"> <a href="#"> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/navigate_before_gm_grey_24dp.svg" alt=""> </i> Why Go </a> </div> <ul class="go-NavigationDrawer-list"> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/solutions#case-studies"> Case Studies </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/solutions#use-cases"> Use Cases </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/security/"> Security </a> </li> </ul> </div> </div> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/learn/">Learn</a> </li> <li class="go-NavigationDrawer-listItem js-mobile-subnav-trigger go-NavigationDrawer-hasSubnav"> <a href="#"> <span>Docs</span> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/navigate_next_gm_grey_24dp.svg" alt=""> </i> </a> <div class="go-NavigationDrawer go-NavigationDrawer-submenuItem"> <div class="go-NavigationDrawer-nav"> <div class="go-NavigationDrawer-header"> <a href="#"><i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/navigate_before_gm_grey_24dp.svg" alt=""> </i> Docs </a> </div> <ul class="go-NavigationDrawer-list"> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/doc/effective_go"> Effective Go </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/doc/"> Go User Manual </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://pkg.go.dev/std"> Standard library </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/doc/devel/release"> Release Notes </a> </li> </ul> </div> </div> </li> <li class="go-NavigationDrawer-listItem go-NavigationDrawer-listItem--active"> <a href="/">Packages</a> </li> <li class="go-NavigationDrawer-listItem js-mobile-subnav-trigger go-NavigationDrawer-hasSubnav"> <a href="#"> <span>Community</span> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/navigate_next_gm_grey_24dp.svg" alt=""> </i> </a> <div class="go-NavigationDrawer go-NavigationDrawer-submenuItem"> <div class="go-NavigationDrawer-nav"> <div class="go-NavigationDrawer-header"> <a href="#"> <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/navigate_before_gm_grey_24dp.svg" alt=""> </i> Community </a> </div> <ul class="go-NavigationDrawer-list"> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/talks/"> Recorded Talks </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://www.meetup.com/pro/go"> Meetups <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/launch_gm_grey_24dp.svg" alt=""> </i> </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://github.com/golang/go/wiki/Conferences"> Conferences <i class="material-icons"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/launch_gm_grey_24dp.svg" alt=""> </i> </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/blog"> Go blog </a> </li> <li class="go-NavigationDrawer-listItem"> <a href="https://go.dev/help"> Go project </a> </li> <li class="go-NavigationDrawer-listItem"> <div>Get connected</div> <div class="go-Header-socialIcons"> <a class="go-Header-socialIcon" href="https://groups.google.com/g/golang-nuts"><img src="/static/shared/logo/social/google-groups.svg" /></a> <a class="go-Header-socialIcon" href="https://github.com/golang"><img src="/static/shared/logo/social/github.svg" /></a> <a class="go-Header-socialIcon" href="https://twitter.com/golang"><img src="/static/shared/logo/social/twitter.svg" /></a> <a class="go-Header-socialIcon" href="https://www.reddit.com/r/golang/"><img src="/static/shared/logo/social/reddit.svg" /></a> <a class="go-Header-socialIcon" href="https://invite.slack.golangbridge.org/"><img src="/static/shared/logo/social/slack.svg" /></a> <a class="go-Header-socialIcon" href="https://stackoverflow.com/collectives/go"><img src="/static/shared/logo/social/stack-overflow.svg" /></a> </div> </li> </ul> </div> </div> </li> </ul> </nav> </aside> <div class="go-NavigationDrawer-scrim js-scrim" role="presentation"></div> <main class="go-Main" id="main-content"> <div class="go-Main-banner" role="alert"></div> <header class="go-Main-header js-mainHeader"> <nav class="go-Main-headerBreadcrumb go-Breadcrumb" aria-label="Breadcrumb" data-test-id="UnitHeader-breadcrumb"> <ol> <li data-test-id="UnitHeader-breadcrumbItem"> <a href="/" data-gtmc="breadcrumb link">Discover Packages</a> </li> <li> <a href="/github.com/andeya/erpc/v7@v7.2.2" data-gtmc="breadcrumb link" aria-current="location" data-test-id="UnitHeader-breadcrumbCurrent"> github.com/andeya/erpc/v7 </a> <button class="go-Button go-Button--inline go-Clipboard js-clipboard" title="Copy path to clipboard.&#10;&#10;github.com/andeya/erpc/v7" aria-label="Copy Path to Clipboard" data-to-copy="github.com/andeya/erpc/v7" data-gtmc="breadcrumbs button" > <img class="go-Icon go-Icon--accented" height="24" width="24" src="/static/shared/icon/content_copy_gm_grey_24dp.svg" alt="" > </button> </li> </ol> </nav> <div class="go-Main-headerContent"> <div class="go-Main-headerTitle js-stickyHeader"> <a class="go-Main-headerLogo" href="https://go.dev/" aria-hidden="true" tabindex="-1" data-gtmc="header link" aria-label="Link to Go Homepage"> <img height="78" width="207" src="/static/shared/logo/go-blue.svg" alt="Go"> </a> <h1 class="UnitHeader-titleHeading" data-test-id="UnitHeader-title">erpc</h1> <span class="go-Chip go-Chip--inverted">module</span> <button class="go-Button go-Button--inline go-Clipboard js-clipboard" title="Copy path to clipboard.&#10;&#10;github.com/andeya/erpc/v7" aria-label="Copy Path to Clipboard" data-to-copy="github.com/andeya/erpc/v7" data-gtmc="title button" tabindex="-1" > <img class="go-Icon go-Icon--accented" height="24" width="24" src="/static/shared/icon/content_copy_gm_grey_24dp.svg" alt="" /> </button> </div> <div class="go-Main-headerDetails"> <span class="go-Main-headerDetailItem" data-test-id="UnitHeader-version"> <a href="?tab=versions" aria-label="Version: v7.2.2" data-gtmc="header link" aria-describedby="version-description"> <span class="go-textSubtle" aria-hidden="true">Version: </span> v7.2.2 </a> <div class="screen-reader-only" id="version-description" hidden> Opens a new window with list of versions in this module. </div> <span class="DetailsHeader-badge--latest" data-test-id="UnitHeader-minorVersionBanner"> <span class="go-Chip DetailsHeader-span--latest">Latest</span> <span class="go-Chip DetailsHeader-span--notAtLatest"> Latest <details class="go-Tooltip js-tooltip" data-gtmc="tooltip"> <summary> <img class="go-Icon go-Icon--inverted" height="24" width="24" src="/static/shared/icon/alert_gm_grey_24dp.svg" alt="Warning"> </summary> <p>This package is not in the latest version of its module.</p> </details> </span> <a href="/github.com/andeya/erpc/v7" aria-label="Go to Latest Version" data-gtmc="header link"> <span class="go-Chip go-Chip--alert DetailsHeader-span--goToLatest">Go to latest</span> </a> </span> </span> <span class="go-Main-headerDetailItem" data-test-id="UnitHeader-commitTime"> Published: Dec 12, 2024 </span> <span class="go-Main-headerDetailItem" data-test-id="UnitHeader-licenses"> License: <a href="/github.com/andeya/erpc/v7?tab=licenses" data-test-id="UnitHeader-license" data-gtmc="header link" aria-describedby="license-description">Apache-2.0</a> </span> <div class="screen-reader-only" id="license-description" hidden> Opens a new window with license information. </div> </div> <div class="UnitHeader-overflowContainer"> <svg class="UnitHeader-overflowImage" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"> <path d="M0 0h24v24H0z" fill="none"/> <path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/> </svg> <select class="UnitHeader-overflowSelect js-selectNav" tabindex="-1"> <option value="/">Main</option> <option value="/github.com/andeya/erpc/v7?tab=versions"> Versions </option> <option value="/github.com/andeya/erpc/v7?tab=licenses"> Licenses </option> </select> </div> </div> </header> <aside class="go-Main-aside js-mainAside"> <div class="UnitMeta"> <h2 class="go-textLabel">Details</h2> <ul class="UnitMeta-details"> <li> <details class="go-Tooltip js-tooltip" data-gtmc="tooltip"> <summary class="go-textSubtle"> <img class="go-Icon go-Icon--accented" tabindex="0" role="button"src="/static/shared/icon/check_circle_gm_grey_24dp.svg" alt="checked" aria-label="Valid file, toggle tooltip"height="24" width="24"> Valid <a href="https://github.com/andeya/erpc/tree/v7.2.2/go.mod" target="_blank" rel="noopener">go.mod</a> file <img class="go-Icon" role="button" tabindex="0" src="/static/shared/icon/help_gm_grey_24dp.svg" alt="" aria-label="Toggle go.mod validity tooltip" height="24" width="24"> </summary> <p aria-live="polite" role="tooltip"> The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go. </p> </details> </li> <li> <details class="go-Tooltip js-tooltip" data-gtmc="tooltip"> <summary class="go-textSubtle"> <img class="go-Icon go-Icon--accented" tabindex="0" role="button"src="/static/shared/icon/check_circle_gm_grey_24dp.svg" alt="checked" aria-label="Valid file, toggle tooltip"height="24" width="24"> Redistributable license <img class="go-Icon" role="button" tabindex="0" src="/static/shared/icon/help_gm_grey_24dp.svg" alt="" aria-label="Toggle redistributable help tooltip" height="24" width="24"> </summary> <p aria-live="polite" role="tooltip"> Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed. </p> </details> </li> <li> <details class="go-Tooltip js-tooltip" data-gtmc="tooltip"> <summary class="go-textSubtle"> <img class="go-Icon go-Icon--accented" tabindex="0" role="button"src="/static/shared/icon/check_circle_gm_grey_24dp.svg" alt="checked" aria-label="Valid file, toggle tooltip"height="24" width="24"> Tagged version <img class="go-Icon" role="button" tabindex="0" src="/static/shared/icon/help_gm_grey_24dp.svg" alt="" aria-label="Toggle tagged version tooltip" height="24" width="24"> </summary> <p aria-live="polite" role="tooltip">Modules with tagged versions give importers more predictable builds.</p> </details> </li> <li> <details class="go-Tooltip js-tooltip" data-gtmc="tooltip"> <summary class="go-textSubtle"> <img class="go-Icon go-Icon--accented" tabindex="0" role="button"src="/static/shared/icon/check_circle_gm_grey_24dp.svg" alt="checked" aria-label="Valid file, toggle tooltip"height="24" width="24"> Stable version <img class="go-Icon" role="button" tabindex="0" aria-label="Toggle stable version tooltip" src="/static/shared/icon/help_gm_grey_24dp.svg" alt="" height="24" width="24"> </summary> <p aria-live="polite" role="tooltip">When a project reaches major version v1 it is considered stable.</p> </details> </li> <li class="UnitMeta-detailsLearn"> <a href="/about#best-practices" data-gtmc="meta link">Learn more about best practices</a> </li> </ul> <h2 class="go-textLabel">Repository</h2> <div class="UnitMeta-repo"> <a href="https://github.com/andeya/erpc" title="https://github.com/andeya/erpc" target="_blank" rel="noopener"> github.com/andeya/erpc </a> </div> <h2 class="go-textLabel" data-test-id="links-heading">Links</h2> <ul class="UnitMeta-links"> <li> <a href="https://deps.dev/go/github.com%2Fandeya%2Ferpc%2Fv7/v7.2.2" title="View this module on Open Source Insights" target="_blank" rel="noopener" data-test-id="meta-link-depsdev"> <img class="depsdev-Icon" src="/static/shared/icon/depsdev-logo.svg" alt="Open Source Insights Logo" /> Open Source Insights </a> </li> </ul> </div> </aside> <nav class="go-Main-nav go-Main-nav--sticky js-mainNav" aria-label="Outline"> <div class="go-Main-navDesktop"> <div class="UnitOutline-jumpTo"> <button class="UnitOutline-jumpToInput go-ShortcutKey js-jumpToInput" aria-controls="jump-to-modal" aria-label="Open Jump to Identifier" data-shortcut="f" data-shortcut-alt="find" data-test-id="jump-to-button" data-gtmc="outline button"> Jump to ... </button> </div> <ul class="go-Tree js-tree" role="tree" aria-label="Outline"> <li class="js-readmeOutline"> <a href="#section-readme" data-gtmc="outline link"> README </a> <ul id="readme-outline"> <li> <a href="#readme-install" data-gtmc="readme outline link"> Install </a> </li> <li> <a href="#readme-feature" data-gtmc="readme outline link"> Feature </a> </li> <li> <a href="#readme-benchmark" data-gtmc="readme outline link"> Benchmark </a> </li> <li> <a href="#readme-example" data-gtmc="readme outline link"> Example </a> <ul> <li> <a href="#readme-server-go" data-gtmc="readme outline link"> server.go </a> </li> <li> <a href="#readme-client-go" data-gtmc="readme outline link"> client.go </a> </li> </ul> </li> <li> <a href="#readme-usage" data-gtmc="readme outline link"> Usage </a> <ul> <li> <a href="#readme-peer-server-or-client-demo" data-gtmc="readme outline link"> Peer(server or client) Demo </a> </li> <li> <a href="#readme-call-struct-api-template" data-gtmc="readme outline link"> Call-Struct API template </a> </li> <li> <a href="#readme-service-method-mapping" data-gtmc="readme outline link"> Service method mapping </a> </li> <li> <a href="#readme-call-function-api-template" data-gtmc="readme outline link"> Call-Function API template </a> </li> <li> <a href="#readme-push-struct-api-template" data-gtmc="readme outline link"> Push-Struct API template </a> </li> <li> <a href="#readme-push-function-api-template" data-gtmc="readme outline link"> Push-Function API template </a> </li> <li> <a href="#readme-unknown-call-function-api-template" data-gtmc="readme outline link"> Unknown-Call-Function API template </a> </li> <li> <a href="#readme-unknown-push-function-api-template" data-gtmc="readme outline link"> Unknown-Push-Function API template </a> </li> <li> <a href="#readme-plugin-demo" data-gtmc="readme outline link"> Plugin Demo </a> </li> <li> <a href="#readme-register-above-handler-and-plugin" data-gtmc="readme outline link"> Register above handler and plugin </a> </li> <li> <a href="#readme-config" data-gtmc="readme outline link"> Config </a> </li> <li> <a href="#readme-optimize" data-gtmc="readme outline link"> Optimize </a> </li> </ul> </li> <li> <a href="#readme-extensions" data-gtmc="readme outline link"> Extensions </a> <ul> <li> <a href="#readme-codec" data-gtmc="readme outline link"> Codec </a> </li> <li> <a href="#readme-plugin" data-gtmc="readme outline link"> Plugin </a> </li> <li> <a href="#readme-protocol" data-gtmc="readme outline link"> Protocol </a> </li> <li> <a href="#readme-transfer-filter" data-gtmc="readme outline link"> Transfer-Filter </a> </li> <li> <a href="#readme-mixer" data-gtmc="readme outline link"> Mixer </a> </li> </ul> </li> <li> <a href="#readme-projects-based-on-erpc" data-gtmc="readme outline link"> Projects based on eRPC </a> </li> <li> <a href="#readme-business-users" data-gtmc="readme outline link"> Business Users </a> </li> <li> <a href="#readme-license" data-gtmc="readme outline link"> License </a> </li> </ul> </li> <li> <a href="#section-directories" data-gtmc="outline link"> Directories </a> </li> </ul> </div> <div class="go-Main-navMobile js-mainNavMobile"> <label class="go-Label"> <select class="go-Select"> <option selected disabled>README</option> </select> </label> </div> </nav> <article class="go-Main-article js-mainContent"> <div class="UnitDetails" data-test-id="UnitDetails" style="display: block;"> <div class="UnitDetails-content js-unitDetailsContent" data-test-id="UnitDetails-content"> <div class="UnitReadme UnitReadme--expanded js-readme"> <h2 class="UnitReadme-title" id="section-readme"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/chrome_reader_mode_gm_grey_24dp.svg" alt=""> README <a class="UnitReadme-idLink" href="#section-readme" title="Go to Readme" aria-label="Go to Readme">¶</a> </h2> <div class="UnitReadme-content" data-test-id="Unit-readmeContent"> <div class="Overview-readmeContent js-readmeContent"><h3 class="h1" id="readme-erpc">eRPC</h3> <p><a href="https://github.com/andeya/erpc/releases" rel="nofollow"><img src="https://img.shields.io/github/tag/andeya/erpc.svg" alt="tag"/></a> <img src="https://img.shields.io/badge/Go-%3E%3D%201.18-%23007d9c" alt="Go Version"/> <a href="https://pkg.go.dev/github.com/andeya/erpc/v7" rel="nofollow"><img src="https://godoc.org/github.com/andeya/erpc?status.svg" alt="GoDoc"/></a> <img src="https://github.com/andeya/erpc/actions/workflows/go-ci.yml/badge.svg" alt="Build Status"/> <a href="https://goreportcard.com/report/github.com/andeya/erpc/v7" rel="nofollow"><img src="https://goreportcard.com/badge/github.com/andeya/erpc/v7" alt="Go report"/></a> <a href="https://github.com/andeya/erpc/blob/v7.2.2/LICENSE" rel="nofollow"><img src="https://img.shields.io/github/license/andeya/erpc" alt="License"/></a></p> <p>eRPC is an efficient, extensible and easy-to-use RPC framework.</p> <p>Suitable for RPC, Microservice, Peer-to-Peer, IM, Game and other fields.</p> <p><a href="https://github.com/andeya/erpc/tree/master/README_ZH.md" rel="nofollow">简体中文</a></p> <p><img src="https://github.com/andeya/erpc/raw/master/doc/erpc_module_diagram.png" alt="eRPC-Framework"/></p> <h4 class="h2" id="readme-install">Install</h4> <ul> <li> <p>go vesion ≥ 1.18</p> </li> <li> <p>install</p> </li> </ul> <pre><code>GO111MODULE=on go get -u -v -insecure github.com/andeya/erpc/v7 </code></pre> <ul> <li>import</li> </ul> <pre><code>import &#34;github.com/andeya/erpc/v7&#34; </code></pre> <h4 class="h2" id="readme-feature">Feature</h4> <ul> <li>Use peer to provide the same API package for the server and client</li> <li>Provide multi-layout abstractions such as: <ul> <li>peer</li> <li>session/socket</li> <li>router</li> <li>handle/context</li> <li>message</li> <li>protocol</li> <li>codec</li> <li>transfer filter</li> <li>plugin</li> </ul> </li> <li>Support reboot and shutdown gracefully</li> <li>HTTP-compatible message format: <ul> <li>Composed of two parts, the <code>Header</code> and the <code>Body</code></li> <li><code>Header</code> contains metadata in the same format as HTTP header</li> <li><code>Body</code> supports for custom codec of Content Type-Like, already implemented: <ul> <li>Protobuf</li> <li>Thrift</li> <li>JSON</li> <li>XML</li> <li>Form</li> <li>Plain</li> </ul> </li> <li>Support push, call-reply and more message types</li> </ul> </li> <li>Support custom message protocol, and provide some common implementations: <ul> <li><code>rawproto</code> - Default high performance binary protocol</li> <li><code>jsonproto</code> - JSON message protocol</li> <li><code>pbproto</code> - Ptotobuf message protocol</li> <li><code>thriftproto</code> - Thrift message protocol</li> <li><code>httproto</code> - HTTP message protocol</li> </ul> </li> <li>Optimized high performance transport layer <ul> <li>Use Non-block socket and I/O multiplexing technology</li> <li>Support setting the size of socket I/O buffer</li> <li>Support setting the size of the reading message (if exceed disconnect it)</li> <li>Support controling the connection file descriptor</li> </ul> </li> <li>Support a variety of network types: <ul> <li><code>tcp</code></li> <li><code>tcp4</code></li> <li><code>tcp6</code></li> <li><code>unix</code></li> <li><code>unixpacket</code></li> <li><code>kcp</code></li> <li><code>quic</code></li> <li>other <ul> <li>websocket</li> <li>evio</li> </ul> </li> </ul> </li> <li>Provide a rich plug-in point, and already implemented: <ul> <li>auth</li> <li>binder</li> <li>heartbeat</li> <li>ignorecase(service method)</li> <li>overloader</li> <li>proxy(for unknown service method)</li> <li>secure</li> </ul> </li> <li>Powerful and flexible logging system: <ul> <li>Detailed log information, support print input and output details</li> <li>Support setting slow operation alarm threshold</li> <li>Support for custom implementation log component</li> </ul> </li> <li>Client session support automatically redials after disconnection</li> </ul> <h4 class="h2" id="readme-benchmark">Benchmark</h4> <p><strong>Self Test</strong></p> <ul> <li> <p>A server and a client process, running on the same machine</p> </li> <li> <p>CPU: Intel Xeon E312xx (Sandy Bridge) 16 cores 2.53GHz</p> </li> <li> <p>Memory: 16G</p> </li> <li> <p>OS: Linux 2.6.32-696.16.1.el6.centos.plus.x86_64, CentOS 6.4</p> </li> <li> <p>Go: 1.9.2</p> </li> <li> <p>Message size: 581 bytes</p> </li> <li> <p>Message codec: protobuf</p> </li> <li> <p>Sent total 1000000 messages</p> </li> <li> <p>erpc</p> </li> </ul> <table> <thead> <tr> <th>client concurrency</th> <th>mean(ms)</th> <th>median(ms)</th> <th>max(ms)</th> <th>min(ms)</th> <th>throughput(TPS)</th> </tr> </thead> <tbody> <tr> <td>100</td> <td>1</td> <td>0</td> <td>16</td> <td>0</td> <td>75505</td> </tr> <tr> <td>500</td> <td>9</td> <td>11</td> <td>97</td> <td>0</td> <td>52192</td> </tr> <tr> <td>1000</td> <td>19</td> <td>24</td> <td>187</td> <td>0</td> <td>50040</td> </tr> <tr> <td>2000</td> <td>39</td> <td>54</td> <td>409</td> <td>0</td> <td>42551</td> </tr> <tr> <td>5000</td> <td>96</td> <td>128</td> <td>1148</td> <td>0</td> <td>46367</td> </tr> </tbody> </table> <ul> <li>erpc/socket</li> </ul> <table> <thead> <tr> <th>client concurrency</th> <th>mean(ms)</th> <th>median(ms)</th> <th>max(ms)</th> <th>min(ms)</th> <th>throughput(TPS)</th> </tr> </thead> <tbody> <tr> <td>100</td> <td>0</td> <td>0</td> <td>14</td> <td>0</td> <td>225682</td> </tr> <tr> <td>500</td> <td>2</td> <td>1</td> <td>24</td> <td>0</td> <td>212630</td> </tr> <tr> <td>1000</td> <td>4</td> <td>3</td> <td>51</td> <td>0</td> <td>180733</td> </tr> <tr> <td>2000</td> <td>8</td> <td>6</td> <td>64</td> <td>0</td> <td>183351</td> </tr> <tr> <td>5000</td> <td>21</td> <td>18</td> <td>651</td> <td>0</td> <td>133886</td> </tr> </tbody> </table> <p><strong>Comparison Test</strong></p> <table> <tbody><tr><th>Environment</th><th>Throughputs</th><th>Mean Latency</th><th>P99 Latency</th></tr> <tr> <td width="10%"><img src="https://github.com/andeya/rpc-benchmark/raw/master/result/env.png"/></td> <td width="30%"><img src="https://github.com/andeya/rpc-benchmark/raw/master/result/throughput.png"/></td> <td width="30%"><img src="https://github.com/andeya/rpc-benchmark/raw/master/result/mean_latency.png"/></td> <td width="30%"><img src="https://github.com/andeya/rpc-benchmark/raw/master/result/p99_latency.png"/></td> </tr> </tbody></table> <p><strong><a href="https://github.com/andeya/rpc-benchmark" rel="nofollow">More Detail</a></strong></p> <ul> <li>Profile torch of erpc/socket</li> </ul> <p><img src="https://github.com/andeya/erpc/raw/master/doc/erpc_socket_profile_torch.png" alt="erpc_socket_profile_torch"/></p> <p><strong><a href="https://github.com/andeya/erpc/raw/master/doc/erpc_socket_profile_torch.svg" rel="nofollow">svg file</a></strong></p> <ul> <li>Heap torch of erpc/socket</li> </ul> <p><img src="https://github.com/andeya/erpc/raw/master/doc/erpc_socket_heap_torch.png" alt="erpc_socket_heap_torch"/></p> <p><strong><a href="https://github.com/andeya/erpc/raw/master/doc/erpc_socket_heap_torch.svg" rel="nofollow">svg file</a></strong></p> <h4 class="h2" id="readme-example">Example</h4> <h5 class="h3" id="readme-server-go">server.go</h5> <pre><code>package main import ( &#34;fmt&#34; &#34;time&#34; &#34;github.com/andeya/erpc/v7&#34; ) func main() { defer erpc.FlushLogger() // graceful go erpc.GraceSignal() // server peer srv := erpc.NewPeer(erpc.PeerConfig{ CountTime: true, ListenPort: 9090, PrintDetail: true, }) // srv.SetTLSConfig(erpc.GenerateTLSConfigForServer()) // router srv.RouteCall(new(Math)) // broadcast per 5s go func() { for { time.Sleep(time.Second * 5) srv.RangeSession(func(sess erpc.Session) bool { sess.Push( &#34;/push/status&#34;, fmt.Sprintf(&#34;this is a broadcast, server time: %v&#34;, time.Now()), ) return true }) } }() // listen and serve srv.ListenAndServe() } // Math handler type Math struct { erpc.CallCtx } // Add handles addition request func (m *Math) Add(arg *[]int) (int, *erpc.Status) { // test meta erpc.Infof(&#34;author: %s&#34;, m.PeekMeta(&#34;author&#34;)) // add var r int for _, a := range *arg { r += a } // response return r, nil } </code></pre> <h5 class="h3" id="readme-client-go">client.go</h5> <pre><code>package main import ( &#34;time&#34; &#34;github.com/andeya/erpc/v7&#34; ) func main() { defer erpc.SetLoggerLevel(&#34;ERROR&#34;)() cli := erpc.NewPeer(erpc.PeerConfig{}) defer cli.Close() // cli.SetTLSConfig(&amp;tls.Config{InsecureSkipVerify: true}) cli.RoutePush(new(Push)) sess, stat := cli.Dial(&#34;:9090&#34;) if !stat.OK() { erpc.Fatalf(&#34;%v&#34;, stat) } var result int stat = sess.Call(&#34;/math/add&#34;, []int{1, 2, 3, 4, 5}, &amp;result, erpc.WithAddMeta(&#34;author&#34;, &#34;andeya&#34;), ).Status() if !stat.OK() { erpc.Fatalf(&#34;%v&#34;, stat) } erpc.Printf(&#34;result: %d&#34;, result) erpc.Printf(&#34;Wait 10 seconds to receive the push...&#34;) time.Sleep(time.Second * 10) } // Push push handler type Push struct { erpc.PushCtx } // Push handles &#39;/push/status&#39; message func (p *Push) Status(arg *string) *erpc.Status { erpc.Printf(&#34;%s&#34;, *arg) return nil } </code></pre> <p><a href="https://github.com/andeya/erpc/tree/master/examples" rel="nofollow">More Examples</a></p> <h4 class="h2" id="readme-usage">Usage</h4> <p><strong>NOTE:</strong></p> <ul> <li>It is best to set the packet size when reading: <code>SetReadLimit</code></li> <li>The default packet size limit when reading is 1 GB</li> </ul> <h5 class="h3" id="readme-peer-server-or-client-demo">Peer(server or client) Demo</h5> <pre><code>// Start a server var peer1 = erpc.NewPeer(erpc.PeerConfig{ ListenPort: 9090, // for server role }) peer1.Listen() ... // Start a client var peer2 = erpc.NewPeer(erpc.PeerConfig{}) var sess, err = peer2.Dial(&#34;127.0.0.1:8080&#34;) </code></pre> <h5 class="h3" id="readme-call-struct-api-template">Call-Struct API template</h5> <pre><code>type Aaa struct { erpc.CallCtx } func (x *Aaa) XxZz(arg *&lt;T&gt;) (&lt;T&gt;, *erpc.Status) { ... return r, nil } </code></pre> <ul> <li>register it to root router:</li> </ul> <pre><code>// register the call route // HTTP mapping: /aaa/xx_zz // RPC mapping: Aaa.XxZz peer.RouteCall(new(Aaa)) // or register the call route // HTTP mapping: /xx_zz // RPC mapping: XxZz peer.RouteCallFunc((*Aaa).XxZz) </code></pre> <h5 class="h3" id="readme-service-method-mapping">Service method mapping</h5> <ul> <li> <p>The default mapping(HTTPServiceMethodMapper) of struct(func) name to service methods:</p> <ul> <li><code>AaBb</code> -&gt; <code>/aa_bb</code></li> <li><code>ABcXYz</code> -&gt; <code>/abc_xyz</code></li> <li><code>Aa__Bb</code> -&gt; <code>/aa_bb</code></li> <li><code>aa__bb</code> -&gt; <code>/aa_bb</code></li> <li><code>ABC__XYZ</code> -&gt; <code>/abc_xyz</code></li> <li><code>Aa_Bb</code> -&gt; <code>/aa/bb</code></li> <li><code>aa_bb</code> -&gt; <code>/aa/bb</code></li> <li><code>ABC_XYZ</code> -&gt; <code>/abc/xyz</code></li> </ul> <pre><code>erpc.SetServiceMethodMapper(erpc.HTTPServiceMethodMapper) </code></pre> </li> <li> <p>The mapping(RPCServiceMethodMapper) of struct(func) name to service methods:</p> <ul> <li><code>AaBb</code> -&gt; <code>AaBb</code></li> <li><code>ABcXYz</code> -&gt; <code>ABcXYz</code></li> <li><code>Aa__Bb</code> -&gt; <code>Aa_Bb</code></li> <li><code>aa__bb</code> -&gt; <code>aa_bb</code></li> <li><code>ABC__XYZ</code> -&gt; <code>ABC_XYZ</code></li> <li><code>Aa_Bb</code> -&gt; <code>Aa.Bb</code></li> <li><code>aa_bb</code> -&gt; <code>aa.bb</code></li> <li><code>ABC_XYZ</code> -&gt; <code>ABC.XYZ</code></li> </ul> <pre><code>erpc.SetServiceMethodMapper(erpc.RPCServiceMethodMapper) </code></pre> </li> </ul> <h5 class="h3" id="readme-call-function-api-template">Call-Function API template</h5> <pre><code>func XxZz(ctx erpc.CallCtx, arg *&lt;T&gt;) (&lt;T&gt;, *erpc.Status) { ... return r, nil } </code></pre> <ul> <li>register it to root router:</li> </ul> <pre><code>// register the call route // HTTP mapping: /xx_zz // RPC mapping: XxZz peer.RouteCallFunc(XxZz) </code></pre> <h5 class="h3" id="readme-push-struct-api-template">Push-Struct API template</h5> <pre><code>type Bbb struct { erpc.PushCtx } func (b *Bbb) YyZz(arg *&lt;T&gt;) *erpc.Status { ... return nil } </code></pre> <ul> <li>register it to root router:</li> </ul> <pre><code>// register the push handler // HTTP mapping: /bbb/yy_zz // RPC mapping: Bbb.YyZz peer.RoutePush(new(Bbb)) // or register the push handler // HTTP mapping: /yy_zz // RPC mapping: YyZz peer.RoutePushFunc((*Bbb).YyZz) </code></pre> <h5 class="h3" id="readme-push-function-api-template">Push-Function API template</h5> <pre><code>// YyZz register the handler func YyZz(ctx erpc.PushCtx, arg *&lt;T&gt;) *erpc.Status { ... return nil } </code></pre> <ul> <li>register it to root router:</li> </ul> <pre><code>// register the push handler // HTTP mapping: /yy_zz // RPC mapping: YyZz peer.RoutePushFunc(YyZz) </code></pre> <h5 class="h3" id="readme-unknown-call-function-api-template">Unknown-Call-Function API template</h5> <pre><code>func XxxUnknownCall (ctx erpc.UnknownCallCtx) (interface{}, *erpc.Status) { ... return r, nil } </code></pre> <ul> <li>register it to root router:</li> </ul> <pre><code>// register the unknown call route: /* peer.SetUnknownCall(XxxUnknownCall) </code></pre> <h5 class="h3" id="readme-unknown-push-function-api-template">Unknown-Push-Function API template</h5> <pre><code>func XxxUnknownPush(ctx erpc.UnknownPushCtx) *erpc.Status { ... return nil } </code></pre> <ul> <li>register it to root router:</li> </ul> <pre><code>// register the unknown push route: /* peer.SetUnknownPush(XxxUnknownPush) </code></pre> <h5 class="h3" id="readme-plugin-demo">Plugin Demo</h5> <pre><code>// NewIgnoreCase Returns a ignoreCase plugin. func NewIgnoreCase() *ignoreCase { return &amp;ignoreCase{} } type ignoreCase struct{} var ( _ erpc.PostReadCallHeaderPlugin = new(ignoreCase) _ erpc.PostReadPushHeaderPlugin = new(ignoreCase) ) func (i *ignoreCase) Name() string { return &#34;ignoreCase&#34; } func (i *ignoreCase) PostReadCallHeader(ctx erpc.ReadCtx) *erpc.Status { // Dynamic transformation path is lowercase ctx.UriObject().Path = strings.ToLower(ctx.UriObject().Path) return nil } func (i *ignoreCase) PostReadPushHeader(ctx erpc.ReadCtx) *erpc.Status { // Dynamic transformation path is lowercase ctx.UriObject().Path = strings.ToLower(ctx.UriObject().Path) return nil } </code></pre> <h5 class="h3" id="readme-register-above-handler-and-plugin">Register above handler and plugin</h5> <pre><code>// add router group group := peer.SubRoute(&#34;test&#34;) // register to test group group.RouteCall(new(Aaa), NewIgnoreCase()) peer.RouteCallFunc(XxZz, NewIgnoreCase()) group.RoutePush(new(Bbb)) peer.RoutePushFunc(YyZz) peer.SetUnknownCall(XxxUnknownCall) peer.SetUnknownPush(XxxUnknownPush) </code></pre> <h5 class="h3" id="readme-config">Config</h5> <pre><code>type PeerConfig struct { Network string `yaml:&#34;network&#34; ini:&#34;network&#34; comment:&#34;Network; tcp, tcp4, tcp6, unix, unixpacket, kcp or quic&#34;` LocalIP string `yaml:&#34;local_ip&#34; ini:&#34;local_ip&#34; comment:&#34;Local IP&#34;` ListenPort uint16 `yaml:&#34;listen_port&#34; ini:&#34;listen_port&#34; comment:&#34;Listen port; for server role&#34;` DialTimeout time.Duration `yaml:&#34;dial_timeout&#34; ini:&#34;dial_timeout&#34; comment:&#34;Default maximum duration for dialing; for client role; ns,µs,ms,s,m,h&#34;` RedialTimes int32 `yaml:&#34;redial_times&#34; ini:&#34;redial_times&#34; comment:&#34;The maximum times of attempts to redial, after the connection has been unexpectedly broken; Unlimited when &lt;0; for client role&#34;` RedialInterval time.Duration `yaml:&#34;redial_interval&#34; ini:&#34;redial_interval&#34; comment:&#34;Interval of redialing each time, default 100ms; for client role; ns,µs,ms,s,m,h&#34;` DefaultBodyCodec string `yaml:&#34;default_body_codec&#34; ini:&#34;default_body_codec&#34; comment:&#34;Default body codec type id&#34;` DefaultSessionAge time.Duration `yaml:&#34;default_session_age&#34; ini:&#34;default_session_age&#34; comment:&#34;Default session max age, if less than or equal to 0, no time limit; ns,µs,ms,s,m,h&#34;` DefaultContextAge time.Duration `yaml:&#34;default_context_age&#34; ini:&#34;default_context_age&#34; comment:&#34;Default CALL or PUSH context max age, if less than or equal to 0, no time limit; ns,µs,ms,s,m,h&#34;` SlowCometDuration time.Duration `yaml:&#34;slow_comet_duration&#34; ini:&#34;slow_comet_duration&#34; comment:&#34;Slow operation alarm threshold; ns,µs,ms,s ...&#34;` PrintDetail bool `yaml:&#34;print_detail&#34; ini:&#34;print_detail&#34; comment:&#34;Is print body and metadata or not&#34;` CountTime bool `yaml:&#34;count_time&#34; ini:&#34;count_time&#34; comment:&#34;Is count cost time or not&#34;` } </code></pre> <h5 class="h3" id="readme-optimize">Optimize</h5> <ul> <li> <p>SetMessageSizeLimit sets max message size. If maxSize&lt;=0, set it to max uint32.</p> <pre><code>func SetMessageSizeLimit(maxMessageSize uint32) </code></pre> </li> <li> <p>SetSocketKeepAlive sets whether the operating system should send keepalive messages on the connection.</p> <pre><code>func SetSocketKeepAlive(keepalive bool) </code></pre> </li> <li> <p>SetSocketKeepAlivePeriod sets period between keep alives.</p> <pre><code>func SetSocketKeepAlivePeriod(d time.Duration) </code></pre> </li> <li> <p>SetSocketNoDelay controls whether the operating system should delay message transmission in hopes of sending fewer messages (Nagle&#39;s algorithm). The default is true (no delay), meaning that data is sent as soon as possible after a Write.</p> <pre><code>func SetSocketNoDelay(_noDelay bool) </code></pre> </li> <li> <p>SetSocketReadBuffer sets the size of the operating system&#39;s receive buffer associated with the connection.</p> <pre><code>func SetSocketReadBuffer(bytes int) </code></pre> </li> <li> <p>SetSocketWriteBuffer sets the size of the operating system&#39;s transmit buffer associated with the connection.</p> <pre><code>func SetSocketWriteBuffer(bytes int) </code></pre> </li> </ul> <h4 class="h2" id="readme-extensions">Extensions</h4> <h5 class="h3" id="readme-codec">Codec</h5> <table> <thead> <tr> <th>package</th> <th>import</th> <th>description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/andeya/erpc/raw/master/codec/json_codec.go" rel="nofollow">json</a></td> <td><code>&#34;github.com/andeya/erpc/v7/codec&#34;</code></td> <td>JSON codec(erpc own)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/raw/master/codec/protobuf_codec.go" rel="nofollow">protobuf</a></td> <td><code>&#34;github.com/andeya/erpc/v7/codec&#34;</code></td> <td>Protobuf codec(erpc own)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/raw/master/codec/thrift_codec.go" rel="nofollow">thrift</a></td> <td><code>&#34;github.com/andeya/erpc/v7/codec&#34;</code></td> <td>Form(url encode) codec(erpc own)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/raw/master/codec/xml_codec.go" rel="nofollow">xml</a></td> <td><code>&#34;github.com/andeya/erpc/v7/codec&#34;</code></td> <td>Form(url encode) codec(erpc own)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/raw/master/codec/plain_codec.go" rel="nofollow">plain</a></td> <td><code>&#34;github.com/andeya/erpc/v7/codec&#34;</code></td> <td>Plain text codec(erpc own)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/raw/master/codec/form_codec.go" rel="nofollow">form</a></td> <td><code>&#34;github.com/andeya/erpc/v7/codec&#34;</code></td> <td>Form(url encode) codec(erpc own)</td> </tr> </tbody> </table> <h5 class="h3" id="readme-plugin">Plugin</h5> <table> <thead> <tr> <th>package</th> <th>import</th> <th>description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/plugin/auth" rel="nofollow">auth</a></td> <td><code>&#34;github.com/andeya/erpc/v7/plugin/auth&#34;</code></td> <td>An auth plugin for verifying peer at the first time</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/plugin/binder" rel="nofollow">binder</a></td> <td><code>&#34;github.com/andeya/erpc/v7/plugin/binder&#34;</code></td> <td>Parameter Binding Verification for Struct Handler</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/plugin/heartbeat" rel="nofollow">heartbeat</a></td> <td><code>&#34;github.com/andeya/erpc/v7/plugin/heartbeat&#34;</code></td> <td>A generic timing heartbeat plugin</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/plugin/proxy" rel="nofollow">proxy</a></td> <td><code>&#34;github.com/andeya/erpc/v7/plugin/proxy&#34;</code></td> <td>A proxy plugin for handling unknown calling or pushing</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/plugin/secure" rel="nofollow">secure</a></td> <td><code>&#34;github.com/andeya/erpc/v7/plugin/secure&#34;</code></td> <td>Encrypting/decrypting the message body</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/plugin/overloader" rel="nofollow">overloader</a></td> <td><code>&#34;github.com/andeya/erpc/v7/plugin/overloader&#34;</code></td> <td>A plugin to protect erpc from overload</td> </tr> </tbody> </table> <h5 class="h3" id="readme-protocol">Protocol</h5> <table> <thead> <tr> <th>package</th> <th>import</th> <th>description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/proto/rawproto" rel="nofollow">rawproto</a></td> <td><code>&#34;github.com/andeya/erpc/v7/proto/rawproto</code></td> <td>A fast socket communication protocol(erpc default protocol)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/proto/jsonproto" rel="nofollow">jsonproto</a></td> <td><code>&#34;github.com/andeya/erpc/v7/proto/jsonproto&#34;</code></td> <td>A JSON socket communication protocol</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/proto/pbproto" rel="nofollow">pbproto</a></td> <td><code>&#34;github.com/andeya/erpc/v7/proto/pbproto&#34;</code></td> <td>A Protobuf socket communication protocol</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/proto/thriftproto" rel="nofollow">thriftproto</a></td> <td><code>&#34;github.com/andeya/erpc/v7/proto/thriftproto&#34;</code></td> <td>A Thrift communication protocol</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/proto/httproto" rel="nofollow">httproto</a></td> <td><code>&#34;github.com/andeya/erpc/v7/proto/httproto&#34;</code></td> <td>A HTTP style socket communication protocol</td> </tr> </tbody> </table> <h5 class="h3" id="readme-transfer-filter">Transfer-Filter</h5> <table> <thead> <tr> <th>package</th> <th>import</th> <th>description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/xfer/gzip" rel="nofollow">gzip</a></td> <td><code>&#34;github.com/andeya/erpc/v7/xfer/gzip&#34;</code></td> <td>Gzip(erpc own)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/xfer/md5" rel="nofollow">md5</a></td> <td><code>&#34;github.com/andeya/erpc/v7/xfer/md5&#34;</code></td> <td>Provides a integrity check transfer filter</td> </tr> </tbody> </table> <h5 class="h3" id="readme-mixer">Mixer</h5> <table> <thead> <tr> <th>package</th> <th>import</th> <th>description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/mixer/multiclient" rel="nofollow">multiclient</a></td> <td><code>&#34;github.com/andeya/erpc/v7/mixer/multiclient&#34;</code></td> <td>Higher throughput client connection pool when transferring large messages (such as downloading files)</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/mixer/websocket" rel="nofollow">websocket</a></td> <td><code>&#34;github.com/andeya/erpc/v7/mixer/websocket&#34;</code></td> <td>Makes the eRPC framework compatible with websocket protocol as specified in RFC 6455</td> </tr> <tr> <td><a href="https://github.com/andeya/erpc/tree/master/mixer/evio" rel="nofollow">evio</a></td> <td><code>&#34;github.com/andeya/erpc/v7/mixer/evio&#34;</code></td> <td>A fast event-loop networking framework that uses the erpc API layer</td> </tr> <tr> <td><a href="https://github.com/xiaoenai/tp-micro/tree/master/helper/mod-html" rel="nofollow">html</a></td> <td><code>html &#34;github.com/xiaoenai/tp-micro/helper/mod-html&#34;</code></td> <td>HTML render for http client</td> </tr> </tbody> </table> <h4 class="h2" id="readme-projects-based-on-erpc">Projects based on eRPC</h4> <table> <thead> <tr> <th>project</th> <th>description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/xiaoenai/tp-micro" rel="nofollow">TP-Micro</a></td> <td>TP-Micro is a simple, powerful micro service framework based on eRPC</td> </tr> <tr> <td><a href="https://github.com/andeya/pholcus" rel="nofollow">Pholcus</a></td> <td>Pholcus is a distributed, high concurrency and powerful web crawler software</td> </tr> </tbody> </table> <h4 class="h2" id="readme-business-users">Business Users</h4> <p><a href="http://www.xiaoenai.com" rel="nofollow"><img src="https://raw.githubusercontent.com/andeya/imgs-repo/master/xiaoenai.png" height="50" alt="深圳市梦之舵信息技术有限公司"/></a>    <a href="https://tech.pingan.com/index.html" rel="nofollow"><img src="http://pa-tech.hirede.com/templates/pa-tech/Images/logo.png" height="50" alt="平安科技"/></a> <br/> <a href="http://www.fun.tv" rel="nofollow"><img src="http://static.funshion.com/open/static/img/logo.gif" height="70" alt="北京风行在线技术有限公司"/></a>    <a href="http://www.kejishidai.cn" rel="nofollow"><img src="http://simg.ktvms.com/picture/logo.png" height="70" alt="北京可即时代网络公司"/></a> <a href="https://www.kuaishou.com/" rel="nofollow"><img src="https://inews.gtimg.com/newsapp_bt/0/4400789257/1000" height="70" alt="快手短视频平台"/></a></p> <h4 class="h2" id="readme-license">License</h4> <p>eRPC is under Apache v2 License. See the <a href="https://github.com/andeya/erpc/raw/master/LICENSE" rel="nofollow">LICENSE</a> file for the full license text</p> </div> </div> <button class="UnitReadme-expandLink js-readmeExpand" data-test-id="readme-expand" data-gtmc="readme button" aria-label="Expand Readme">Expand ▾</button> <button class="UnitReadme-collapseLink js-readmeCollapse" data-test-id="readme-collapse" data-gtmc="readme button" aria-label="Expand Readme">Collapse ▴</button> </div> <div class="UnitDirectories js-unitDirectories"> <h2 class="UnitDirectories-title" id="section-directories"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/folder_gm_grey_24dp.svg" alt=""> Directories <a class="UnitDirectories-idLink" href="#section-directories" title="Go to Directories" aria-label="Go to Directories">¶</a> </h2> <div class="UnitDirectories-toggles"> <div class="UnitDirectories-toggleButtons"> <button class="js-showInternalDirectories" data-test-id="internal-directories-toggle" data-gtmc="directories button" aria-label="Show Internal Directories"> Show internal </button> <button class="js-expandAllDirectories" data-test-id="directories-toggle" data-gtmc="directories button" aria-label="Expand All Directories"> Expand all </button> </div> </div> <table class="UnitDirectories-table UnitDirectories-table--tree js-expandableTable" data-test-id="UnitDirectories-table"> <tr class="UnitDirectories-tableHeader UnitDirectories-tableHeader--tree"> <th>Path</th> <th class="UnitDirectories-desktopSynopsis">Synopsis</th> </tr> <tr class=""> <td data-id="codec" data-aria-owns=""> <div class="UnitDirectories-pathCell"> <div><a href="/github.com/andeya/erpc/v7@v7.2.2/codec">codec</a> </div> <div class="UnitDirectories-mobileSynopsis">Package codec is the body&#39;s codec set.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package codec is the body&#39;s codec set.</td></tr></tr> <tr data-aria-controls="examples-bench/msg examples-plugin-tps " class=""> <td data-id="examples" data-aria-owns="examples-bench/msg examples-plugin-tps "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="2 more from" data-aria-controls="examples-bench/msg examples-plugin-tps " data-aria-labelledby="examples-button examples" data-id="examples-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><span>examples</span> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr><tr data-id="examples-bench/msg" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/examples/bench/msg">bench/msg</a> </span> <div class="UnitDirectories-mobileSynopsis">Package msg is a generated protocol buffer package.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package msg is a generated protocol buffer package.</td><tr data-id="examples-plugin-tps" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/examples/plugin-tps">plugin-tps</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr> <tr class=""> <td data-id="kcp" data-aria-owns=""> <div class="UnitDirectories-pathCell"> <div><a href="/github.com/andeya/erpc/v7@v7.2.2/kcp">kcp</a> </div> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr></tr> <tr data-aria-controls="mixer-evio mixer-multiclient mixer-websocket mixer-websocket/jsonSubProto mixer-websocket/pbSubProto mixer-websocket/pbSubProto/pb mixer-websocket/websocket " class=""> <td data-id="mixer" data-aria-owns="mixer-evio mixer-multiclient mixer-websocket mixer-websocket/jsonSubProto mixer-websocket/pbSubProto mixer-websocket/pbSubProto/pb mixer-websocket/websocket "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="7 more from" data-aria-controls="mixer-evio mixer-multiclient mixer-websocket mixer-websocket/jsonSubProto mixer-websocket/pbSubProto mixer-websocket/pbSubProto/pb mixer-websocket/websocket " data-aria-labelledby="mixer-button mixer" data-id="mixer-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><span>mixer</span> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr><tr data-id="mixer-evio" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/evio">evio</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="mixer-multiclient" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/multiclient">multiclient</a> </span> <div class="UnitDirectories-mobileSynopsis">Package multiclient is a higher throughput client connection pool when transferring large messages (such as downloading files).</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package multiclient is a higher throughput client connection pool when transferring large messages (such as downloading files).</td><tr data-id="mixer-websocket" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/websocket">websocket</a> </span> <div class="UnitDirectories-mobileSynopsis">Package websocket is an extension package that makes the eRPC framework compatible with websocket protocol as specified in RFC 6455.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package websocket is an extension package that makes the eRPC framework compatible with websocket protocol as specified in RFC 6455.</td><tr data-id="mixer-websocket/jsonSubProto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/websocket/jsonSubProto">websocket/jsonSubProto</a> </span> <div class="UnitDirectories-mobileSynopsis">Package jsonSubProto is implemented JSON socket communication protocol.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package jsonSubProto is implemented JSON socket communication protocol.</td><tr data-id="mixer-websocket/pbSubProto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/websocket/pbSubProto">websocket/pbSubProto</a> </span> <div class="UnitDirectories-mobileSynopsis">Package pbSubProto is implemented PROTOBUF socket communication protocol.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package pbSubProto is implemented PROTOBUF socket communication protocol.</td><tr data-id="mixer-websocket/pbSubProto/pb" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/websocket/pbSubProto/pb">websocket/pbSubProto/pb</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="mixer-websocket/websocket" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/mixer/websocket/websocket">websocket/websocket</a> </span> <div class="UnitDirectories-mobileSynopsis">Package websocket implements a client and server for the WebSocket protocol as specified in RFC 6455.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package websocket implements a client and server for the WebSocket protocol as specified in RFC 6455.</td></tr> <tr data-aria-controls="plugin-auth plugin-binder plugin-heartbeat plugin-ignorecase plugin-overloader plugin-proxy plugin-secure " class=""> <td data-id="plugin" data-aria-owns="plugin-auth plugin-binder plugin-heartbeat plugin-ignorecase plugin-overloader plugin-proxy plugin-secure "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="7 more from" data-aria-controls="plugin-auth plugin-binder plugin-heartbeat plugin-ignorecase plugin-overloader plugin-proxy plugin-secure " data-aria-labelledby="plugin-button plugin" data-id="plugin-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><span>plugin</span> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr><tr data-id="plugin-auth" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/auth">auth</a> </span> <div class="UnitDirectories-mobileSynopsis">Package auth is a plugin for verifying peer at the first time.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package auth is a plugin for verifying peer at the first time.</td><tr data-id="plugin-binder" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/binder">binder</a> </span> <div class="UnitDirectories-mobileSynopsis">Package binder is Parameter Binding Verification Plugin for Struct Handler.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package binder is Parameter Binding Verification Plugin for Struct Handler.</td><tr data-id="plugin-heartbeat" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/heartbeat">heartbeat</a> </span> <div class="UnitDirectories-mobileSynopsis">Heartbeat is a generic timing heartbeat plugin.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Heartbeat is a generic timing heartbeat plugin.</td><tr data-id="plugin-ignorecase" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/ignorecase">ignorecase</a> </span> <div class="UnitDirectories-mobileSynopsis">Package ignorecase dynamically ignoring the case of path</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package ignorecase dynamically ignoring the case of path</td><tr data-id="plugin-overloader" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/overloader">overloader</a> </span> <div class="UnitDirectories-mobileSynopsis">Package overloader is a plugin to protect erpc from overload.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package overloader is a plugin to protect erpc from overload.</td><tr data-id="plugin-proxy" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/proxy">proxy</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="plugin-secure" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/plugin/secure">secure</a> </span> <div class="UnitDirectories-mobileSynopsis">Package secure encrypting/decrypting the message body.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package secure encrypting/decrypting the message body.</td></tr> <tr data-aria-controls="proto-httproto proto-jsonproto proto-pbproto proto-pbproto/pb proto-rawproto proto-thriftproto proto-thriftproto/gen-go/thriftproto_test " class=""> <td data-id="proto" data-aria-owns="proto-httproto proto-jsonproto proto-pbproto proto-pbproto/pb proto-rawproto proto-thriftproto proto-thriftproto/gen-go/thriftproto_test "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="7 more from" data-aria-controls="proto-httproto proto-jsonproto proto-pbproto proto-pbproto/pb proto-rawproto proto-thriftproto proto-thriftproto/gen-go/thriftproto_test " data-aria-labelledby="proto-button proto" data-id="proto-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><span>proto</span> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr><tr data-id="proto-httproto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/httproto">httproto</a> </span> <div class="UnitDirectories-mobileSynopsis">Package httproto is implemented HTTP style socket communication protocol.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package httproto is implemented HTTP style socket communication protocol.</td><tr data-id="proto-jsonproto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/jsonproto">jsonproto</a> </span> <div class="UnitDirectories-mobileSynopsis">Package jsonproto is implemented JSON socket communication protocol.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package jsonproto is implemented JSON socket communication protocol.</td><tr data-id="proto-pbproto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/pbproto">pbproto</a> </span> <div class="UnitDirectories-mobileSynopsis">Package pbproto is implemented PROTOBUF socket communication protocol.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package pbproto is implemented PROTOBUF socket communication protocol.</td><tr data-id="proto-pbproto/pb" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/pbproto/pb">pbproto/pb</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="proto-rawproto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/rawproto">rawproto</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="proto-thriftproto" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/thriftproto">thriftproto</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="proto-thriftproto/gen-go/thriftproto_test" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/proto/thriftproto/gen-go/thriftproto_test">thriftproto/gen-go/thriftproto_test</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr> <tr class=""> <td data-id="quic" data-aria-owns=""> <div class="UnitDirectories-pathCell"> <div><a href="/github.com/andeya/erpc/v7@v7.2.2/quic">quic</a> </div> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr></tr> <tr data-aria-controls="socket-example/pb " class=""> <td data-id="socket" data-aria-owns="socket-example/pb "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="1 more from" data-aria-controls="socket-example/pb " data-aria-labelledby="socket-button socket" data-id="socket-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><a href="/github.com/andeya/erpc/v7@v7.2.2/socket">socket</a> </div> <div class="UnitDirectories-mobileSynopsis">Package socket provides a concise, powerful and high-performance TCP.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package socket provides a concise, powerful and high-performance TCP.</td></tr><tr data-id="socket-example/pb" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/socket/example/pb">example/pb</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr> <tr data-aria-controls="utils-color " class=""> <td data-id="utils" data-aria-owns="utils-color "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="1 more from" data-aria-controls="utils-color " data-aria-labelledby="utils-button utils" data-id="utils-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><a href="/github.com/andeya/erpc/v7@v7.2.2/utils">utils</a> </div> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr><tr data-id="utils-color" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/utils/color">color</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td></tr> <tr data-aria-controls="xfer-gzip xfer-md5 " class=""> <td data-id="xfer" data-aria-owns="xfer-gzip xfer-md5 "> <div class="UnitDirectories-pathCell"> <div><button type="button" class="go-Button go-Button--inline UnitDirectories-toggleButton" aria-expanded="false" aria-label="2 more from" data-aria-controls="xfer-gzip xfer-md5 " data-aria-labelledby="xfer-button xfer" data-id="xfer-button"> <img class="go-Icon" height="24" width="24" src="/static/shared/icon/arrow_right_gm_grey_24dp.svg" alt=""> </button><a href="/github.com/andeya/erpc/v7@v7.2.2/xfer">xfer</a> </div> <div class="UnitDirectories-mobileSynopsis">Package xfer is transfer filter set.</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package xfer is transfer filter set.</td></tr><tr data-id="xfer-gzip" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/xfer/gzip">gzip</a> </span> <div class="UnitDirectories-mobileSynopsis"></div> </div> </td> <td class="UnitDirectories-desktopSynopsis"></td><tr data-id="xfer-md5" class=""> <td> <div class="UnitDirectories-subdirectory"> <span> <a href="/github.com/andeya/erpc/v7@v7.2.2/xfer/md5">md5</a> </span> <div class="UnitDirectories-mobileSynopsis">Package md5 provides a integrity check transfer filter</div> </div> </td> <td class="UnitDirectories-desktopSynopsis">Package md5 provides a integrity check transfer filter</td></tr> </table> </div> </div> </div> <div id="showInternal-description" hidden> Click to show internal directories. </div> <div id="hideInternal-description" hidden> Click to hide internal directories. </div> </article> <footer class="go-Main-footer"></footer> </main> <footer class="go-Footer"> <div class="go-Footer-links"> <div class="go-Footer-linkColumn"> <a href="https://go.dev/solutions" class="go-Footer-link go-Footer-link--primary" data-gtmc="footer link"> Why Go </a> <a href="https://go.dev/solutions#use-cases" class="go-Footer-link" data-gtmc="footer link"> Use Cases </a> <a href="https://go.dev/solutions#case-studies" class="go-Footer-link" data-gtmc="footer link"> Case Studies </a> </div> <div class="go-Footer-linkColumn"> <a href="https://learn.go.dev/" class="go-Footer-link go-Footer-link--primary" data-gtmc="footer link"> Get Started </a> <a href="https://play.golang.org" class="go-Footer-link" data-gtmc="footer link"> Playground </a> <a href="https://tour.golang.org" class="go-Footer-link" data-gtmc="footer link"> Tour </a> <a href="https://stackoverflow.com/questions/tagged/go?tab=Newest" class="go-Footer-link" data-gtmc="footer link"> Stack Overflow </a> <a href="https://go.dev/help" class="go-Footer-link" data-gtmc="footer link"> Help </a> </div> <div class="go-Footer-linkColumn"> <a href="https://pkg.go.dev" class="go-Footer-link go-Footer-link--primary" data-gtmc="footer link"> Packages </a> <a href="/std" class="go-Footer-link" data-gtmc="footer link"> Standard Library </a> <a href="/golang.org/x" class="go-Footer-link" data-gtmc="footer link"> Sub-repositories </a> <a href="https://pkg.go.dev/about" class="go-Footer-link" data-gtmc="footer link"> About Go Packages </a> </div> <div class="go-Footer-linkColumn"> <a href="https://go.dev/project" class="go-Footer-link go-Footer-link--primary" data-gtmc="footer link"> About </a> <a href="https://go.dev/dl/" class="go-Footer-link" data-gtmc="footer link">Download</a> <a href="https://go.dev/blog" class="go-Footer-link" data-gtmc="footer link">Blog</a> <a href="https://github.com/golang/go/issues" class="go-Footer-link" data-gtmc="footer link"> Issue Tracker </a> <a href="https://go.dev/doc/devel/release.html" class="go-Footer-link" data-gtmc="footer link"> Release Notes </a> <a href="https://blog.golang.org/go-brand" class="go-Footer-link" data-gtmc="footer link"> Brand Guidelines </a> <a href="https://go.dev/conduct" class="go-Footer-link" data-gtmc="footer link"> Code of Conduct </a> </div> <div class="go-Footer-linkColumn"> <a href="https://www.twitter.com/golang" class="go-Footer-link go-Footer-link--primary" data-gtmc="footer link"> Connect </a> <a href="https://www.twitter.com/golang" class="go-Footer-link" data-gtmc="footer link"> Twitter </a> <a href="https://github.com/golang" class="go-Footer-link" data-gtmc="footer link">GitHub</a> <a href="https://invite.slack.golangbridge.org/" class="go-Footer-link" data-gtmc="footer link"> Slack </a> <a href="https://reddit.com/r/golang" class="go-Footer-link" data-gtmc="footer link"> r/golang </a> <a href="https://www.meetup.com/pro/go" class="go-Footer-link" data-gtmc="footer link"> Meetup </a> <a href="https://golangweekly.com/" class="go-Footer-link" data-gtmc="footer link"> Golang Weekly </a> </div> </div> <div class="go-Footer-bottom"> <img class="go-Footer-gopher" width="1431" height="901" src="/static/shared/gopher/pilot-bust-1431x901.svg" alt="Gopher in flight goggles"> <ul class="go-Footer-listRow"> <li class="go-Footer-listItem"> <a href="https://go.dev/copyright" data-gtmc="footer link">Copyright</a> </li> <li class="go-Footer-listItem"> <a href="https://go.dev/tos" data-gtmc="footer link">Terms of Service</a> </li> <li class="go-Footer-listItem"> <a href="http://www.google.com/intl/en/policies/privacy/" data-gtmc="footer link" target="_blank" rel="noopener"> Privacy Policy </a> </li> <li class="go-Footer-listItem"> <a href="https://go.dev/s/pkgsite-feedback" target="_blank" rel="noopener" data-gtmc="footer link"> Report an Issue </a> </li> <li class="go-Footer-listItem"> <button class="go-Button go-Button--text go-Footer-toggleTheme js-toggleTheme" aria-label="Theme Toggle"> <img data-value="auto" class="go-Icon go-Icon--inverted" height="24" width="24" src="/static/shared/icon/brightness_6_gm_grey_24dp.svg" alt="System theme"> <img data-value="dark" class="go-Icon go-Icon--inverted" height="24" width="24" src="/static/shared/icon/brightness_2_gm_grey_24dp.svg" alt="Dark theme"> <img data-value="light" class="go-Icon go-Icon--inverted" height="24" width="24" src="/static/shared/icon/light_mode_gm_grey_24dp.svg" alt="Light theme"> <p> Theme Toggle </p> </button> </li> <li class="go-Footer-listItem"> <button class="go-Button go-Button--text go-Footer-keyboard js-openShortcuts" aria-label="Shorcuts Modal"> <img class="go-Icon go-Icon--inverted" height="24" width="24" src="/static/shared/icon/keyboard_grey_24dp.svg" alt=""> <p> Shortcuts Modal </p> </button> </li> </ul> <a class="go-Footer-googleLogo" href="https://google.com" target="_blank"rel="noopener" data-gtmc="footer link"> <img class="go-Footer-googleLogoImg" height="24" width="72" src="/static/shared/logo/google-white.svg" alt="Google logo"> </a> </div> </footer> <dialog id="jump-to-modal" class="JumpDialog go-Modal go-Modal--md js-modal"> <form method="dialog" data-gmtc="jump to form" aria-label="Jump to Identifier"> <div class="Dialog-title go-Modal-header"> <h2>Jump to</h2> <button class="go-Button go-Button--inline" type="button" data-modal-close data-gtmc="modal button" aria-label="Close" > <img class="go-Icon" height="24" width="24" src="/static/shared/icon/close_gm_grey_24dp.svg" alt="" /> </button> </div> <div class="JumpDialog-filter"> <input class="JumpDialog-input go-Input" autocomplete="off" type="text"> </div> <div class="JumpDialog-body go-Modal-body"> <div class="JumpDialog-list"></div> </div> <div class="go-Modal-actions"> <button class="go-Button" data-test-id="close-dialog">Close</button> </div> </form> </dialog> <dialog class="ShortcutsDialog go-Modal go-Modal--sm js-modal"> <form method="dialog"> <div class="go-Modal-header"> <h2>Keyboard shortcuts</h2> <button class="go-Button go-Button--inline" type="button" data-modal-close data-gtmc="modal button" aria-label="Close" > <img class="go-Icon" height="24" width="24" src="/static/shared/icon/close_gm_grey_24dp.svg" alt="" /> </button> </div> <div class="go-Modal-body"> <table> <tbody> <tr><td class="ShortcutsDialog-key"> <strong>?</strong></td><td> : This menu</td> </tr> <tr><td class="ShortcutsDialog-key"> <strong>/</strong></td><td> : Search site</td> </tr> <tr><td class="ShortcutsDialog-key"> <strong>f</strong> or <strong>F</strong></td><td> : Jump to</td> </tr> <tr> <td class="ShortcutsDialog-key"><strong>y</strong> or <strong>Y</strong></td> <td> : Canonical URL</td> </tr> </tbody> </table> </div> <div class="go-Modal-actions"> <button class="go-Button" data-test-id="close-dialog">Close</button> </div> </form> </dialog> <section class="Cookie-notice js-cookieNotice"> <div>go.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic. <a target=_blank href="https://policies.google.com/technologies/cookies">Learn more.</a></div> <div><button class="go-Button">Okay</button></div> </section> <script> // this will throw if the querySelector can’t find the element const gtmId = document.querySelector('.js-gtmID').dataset.gtmid; if (!gtmId) { throw new Error('Google Tag Manager ID not found'); } loadScript(`https://www.googletagmanager.com/gtm.js?id=${gtmId}`); </script> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W8MVQXG" height="0" width="0" style="display:none;visibility:hidden"> </iframe> </noscript> <div class="js-canonicalURLPath" data-canonical-url-path="/github.com/andeya/erpc/v7@v7.2.2" hidden></div> <div class="js-playgroundVars" data-modulepath="github.com/andeya/erpc/v7" data-version="v7.2.2" hidden></div> <script> loadScript('/static/frontend/unit/main/main.js') </script> <script> loadScript('/static/frontend/unit/unit.js') </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10