Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Package netpoll implements a network poller based on epoll/kqueue.

License

NotificationsYou must be signed in to change notification settings

hslam/netpoll

Repository files navigation

PkgGoDevBuild StatuscodecovGo Report CardLICENSE

Package netpoll implements a network poller based on epoll/kqueue.

Features

  • Epoll/kqueue
  • TCP/UNIX
  • Compatible with the net.Conn interface.
  • Upgrade connection
  • Non-blocking I/O
  • Splice/sendfile
  • Rescheduling workers

Comparison to other packages.

Packagenetnetpollgnetevio
Low memory usageNoYesYesYes
Non-blocking I/ONoYesYesYes
Splice/sendfileYesYesNoNo
ReschedulingYesYesNoNo
Compatible with the net.Conn interfaceYesYesNoNo

mock 0msmock 1ms

Get started

Install

go get github.com/hslam/netpoll

Import

import "github.com/hslam/netpoll"

Usage

Simple Example

package mainimport"github.com/hslam/netpoll"funcmain() {varhandler=&netpoll.DataHandler{NoShared:true,NoCopy:true,BufferSize:1024,HandlerFunc:func(req []byte) (res []byte) {res=reqreturn},}iferr:=netpoll.ListenAndServe("tcp",":9999",handler);err!=nil {panic(err)}}

TLS Example

package mainimport ("crypto/tls""github.com/hslam/netpoll""github.com/hslam/socket""net")funcmain() {varhandler=&netpoll.DataHandler{NoShared:true,NoCopy:true,BufferSize:1024,HandlerFunc:func(req []byte) (res []byte) {res=reqreturn},}handler.SetUpgrade(func(conn net.Conn) (net.Conn,error) {tlsConn:=tls.Server(conn,socket.DefalutTLSConfig())iferr:=tlsConn.Handshake();err!=nil {returnnil,err}returntlsConn,nil})iferr:=netpoll.ListenAndServe("tcp",":9999",handler);err!=nil {panic(err)}}

Websocket Example

package mainimport ("github.com/hslam/netpoll""github.com/hslam/websocket""net")funcmain() {varhandler=&netpoll.ConnHandler{}handler.SetUpgrade(func(conn net.Conn) (netpoll.Context,error) {returnwebsocket.Upgrade(conn,nil)})handler.SetServe(func(context netpoll.Context)error {ws:=context.(*websocket.Conn)msg,err:=ws.ReadMessage()iferr!=nil {returnerr}returnws.WriteMessage(msg)})iferr:=netpoll.ListenAndServe("tcp",":9999",handler);err!=nil {panic(err)}}

HTTP Example

package mainimport ("bufio""github.com/hslam/mux""github.com/hslam/netpoll""github.com/hslam/response""net""net/http""sync")funcmain() {m:=mux.New()m.HandleFunc("/",func(w http.ResponseWriter,r*http.Request) {w.Write([]byte("Hello World"))})ListenAndServe(":8080",m)}funcListenAndServe(addrstring,handler http.Handler)error {varh=&netpoll.ConnHandler{}typeContextstruct {reader*bufio.Readerrw*bufio.ReadWriterconn    net.Connserving sync.Mutex}h.SetUpgrade(func(conn net.Conn) (netpoll.Context,error) {reader:=bufio.NewReader(conn)rw:=bufio.NewReadWriter(reader,bufio.NewWriter(conn))return&Context{reader:reader,conn:conn,rw:rw},nil})h.SetServe(func(context netpoll.Context)error {ctx:=context.(*Context)ctx.serving.Lock()req,err:=http.ReadRequest(ctx.reader)iferr!=nil {ctx.serving.Unlock()returnerr}res:=response.NewResponse(req,ctx.conn,ctx.rw)handler.ServeHTTP(res,req)res.FinishRequest()ctx.serving.Unlock()response.FreeResponse(res)returnnil})returnnetpoll.ListenAndServe("tcp",addr,h)}

License

This package is licensed under a MIT license (Copyright (c) 2020 Meng Huang)

Author

netpoll was written by Meng Huang.


[8]ページ先頭

©2009-2025 Movatter.jp