MCPcopy Index your code
hub / github.com/cloudwego/netpoll

github.com/cloudwego/netpoll @v0.7.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.4 ↗ · + Follow
616 symbols 2,705 edges 69 files 354 documented · 57% 2 cross-repo links updated 7d agov0.7.3 · 2026-06-10★ 4,5862 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

CloudWeGo-Netpoll

中文

Release WebSite License Go Report Card OpenIssue ClosedIssue Stars Forks

Introduction

Netpoll is a high-performance non-blocking I/O networking framework, which focused on RPC scenarios, developed by ByteDance.

RPC is usually heavy on processing logic and therefore cannot handle I/O serially. But Go's standard library net is designed for blocking I/O APIs, so that the RPC framework can only follow the One Conn One Goroutine design. It will waste a lot of cost for context switching, due to a large number of goroutines under high concurrency. Besides, net.Conn has no API to check Alive, so it is difficult to make an efficient connection pool for RPC framework, because there may be a large number of failed connections in the pool.

On the other hand, the open source community currently lacks Go network libraries that focus on RPC scenarios. Similar repositories such as: evio, gnet, etc., are all focus on scenarios like Redis, HAProxy.

But now, Netpoll was born and solved the above problems. It draws inspiration from the design of evio and netty, has excellent Performance, and is more suitable for microservice architecture. Also Netpoll provides a number of Features, and it is recommended to replace net in some RPC scenarios.

We developed the RPC framework Kitex and HTTP framework Hertz based on Netpoll, both with industry-leading performance.

Examples show how to build RPC client and server using Netpoll.

For more information, please refer to Document.

Features

  • Already

    • LinkBuffer provides nocopy API for streaming reading and writing
    • gopool provides high-performance goroutine pool
    • mcache provides efficient memory reuse
    • IsActive supports checking whether the connection is alive
    • Dialer supports building clients
    • EventLoop supports building a server
    • TCP, Unix Domain Socket
    • Linux, macOS (operating system)
  • Unsupported

    • Windows (operating system)

Performance

Benchmark should meet the requirements of industrial use. In the RPC scenario, concurrency and timeout are necessary support items.

We provide the netpoll-benchmark project to track and compare the performance of Netpoll and other frameworks under different conditions for reference.

More benchmarks reference kitex-benchmark and hertz-benchmark.

Reference

Extension points exported contracts — how you extend this code

Writer (Interface)
Writer is a collection of operations for nocopy writes. The usage of the design is a two-step operation, first apply fo [4 …
nocopy.go
Conn (Interface)
Conn extends net.Conn, but supports getting the conn's fd. [2 implementers]
connection.go
EventLoop (Interface)
A EventLoop is a network server. [1 implementers]
eventloop.go
Poll (Interface)
Poll monitors fd(file descriptor), calls the FDOperator to perform specific actions, and shields underlying differences. [1 …
poll.go
WriterGetter (FuncType)
WriterGetter is used to get a netpoll.Writer.
mux/shard_queue.go
Reader (Interface)
Reader is a collection of operations for nocopy reads. For ease of use, it is recommended to implement Reader as a bloc [3 …
nocopy.go
Listener (Interface)
Listener extends net.Listener, but supports getting the listener's fd. [2 implementers]
connection.go
OnPrepare (FuncType)
* The Connection Callback Sequence Diagram | Connection State | Callback Function | Notes | Connec
eventloop.go

Core symbols most depended-on inside this repo

Close
called by 100
poll.go
Len
called by 94
nocopy.go
Flush
called by 62
nocopy.go
Next
called by 60
nocopy.go
Malloc
called by 45
nocopy.go
Reader
called by 38
connection.go
Exception
called by 37
connection_errors.go
NewLinkBuffer
called by 34
nocopy_linkbuffer.go

Shape

Method 331
Function 218
Struct 46
Interface 12
FuncType 6
TypeAlias 3

Languages

Go100%

Modules by API surface

nocopy_linkbuffer.go52 symbols
connection_impl.go46 symbols
nocopy_readwriter.go33 symbols
nocopy.go30 symbols
nocopy_linkbuffer_race.go29 symbols
nocopy_linkbuffer_test.go23 symbols
netpoll_unix_test.go23 symbols
connection_test.go22 symbols
connection_onevent.go17 symbols
connection.go17 symbols
poll_loadbalance.go16 symbols
net_tcpsock.go15 symbols

Used by 2 indexed graphs manifest dependencies, hub-wide

Dependencies from manifests, versioned

github.com/cloudwego/gopkgv0.1.4 · 1×
golang.org/x/sysv0.30.0 · 1×

For agents

$ claude mcp add netpoll \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact