netpollmux
v1.0.1: Update README.md
パッケージNetpollMuxは、epoll/kqueueに基づいてネットワークポーラーを実装します。
他のパッケージとの比較。
| パッケージ | ネット | netpollmux | gnet | evio |
|---|---|---|---|---|
| メモリの使用量が少ない | いいえ | はい | はい | はい |
| 非ブロッキングI/O | いいえ | はい | はい | はい |
| スプライス/送信ファイル | はい | はい | いいえ | いいえ |
| 再スケジュール | はい | はい | いいえ | いいえ |
| net.connインターフェイスと互換性があります | はい | はい | いいえ | いいえ |
go get github.com/php2go/netpollmux
import "github.com/php2go/netpollmux"
package main
import "github.com/php2go/netpollmux"
func main () {
var handler = & netpoll. DataHandler {
NoShared : true ,
NoCopy : true ,
BufferSize : 1024 ,
HandlerFunc : func ( req [] byte ) ( res [] byte ) {
res = req
return
},
}
if err := netpoll . ListenAndServe ( "tcp" , ":9999" , handler ); err != nil {
panic ( err )
}
} package main
import (
"crypto/tls"
"github.com/php2go/netpollmux/internal/socket"
"github.com/php2go/netpollmux/netpoll"
"net"
)
func main () {
var handler = & netpoll. DataHandler {
NoShared : true ,
NoCopy : true ,
BufferSize : 1024 ,
HandlerFunc : func ( req [] byte ) ( res [] byte ) {
res = req
return
},
}
handler . SetUpgrade ( func ( conn net. Conn ) (net. Conn , error ) {
tlsConn := tls . Server ( conn , socket . DefalutTLSConfig ())
if err := tlsConn . Handshake (); err != nil {
return nil , err
}
return tlsConn , nil
})
if err := netpoll . ListenAndServe ( "tcp" , ":9999" , handler ); err != nil {
panic ( err )
}
} package main
import (
"github.com/php2go/netpollmux/internal/websocket"
"github.com/php2go/netpollmux/netpoll"
"net"
)
func main () {
var handler = & netpoll. ConnHandler {}
handler . SetUpgrade ( func ( conn net. Conn ) (netpoll. Context , error ) {
return websocket . Upgrade ( conn , nil )
})
handler . SetServe ( func ( context netpoll. Context ) error {
ws := context .( * websocket. Conn )
msg , err := ws . ReadMessage ()
if err != nil {
return err
}
return ws . WriteMessage ( msg )
})
if err := netpoll . ListenAndServe ( "tcp" , ":9999" , handler ); err != nil {
panic ( err )
}
} package main
import (
"bufio"
"log"
"net"
"net/http"
"sync"
"github.com/php2go/netpollmux/internal/logger"
"github.com/php2go/netpollmux/mux"
"github.com/php2go/netpollmux/netpoll"
)
func main () {
m := mux . NewRoute ()
m . GET ( "/hello/:id" , func ( w http. ResponseWriter , req * http. Request , params httprouter. Params ) {
pp := req . URL . Query ()
logger . Info ( "query params:" , params , pp )
mux . JSON ( w , req , [] string { "hello world" }, http . StatusOK )
})
log . Fatal ( m . Run ( ":8080" ))
}