netpollmux
v1.0.1: Update README.md
Пакет NetPollMux реализует сетевой Poller на основе Epoll/Kqueue.
Сравнение с другими пакетами.
| Упаковка | сеть | NetPollMux | Gnet | evio |
|---|---|---|---|---|
| Низкое использование памяти | Нет | Да | Да | Да |
| Не блокирующий ввод/вывод | Нет | Да | Да | Да |
| Сплайс/sendfile | Да | Да | Нет | Нет |
| Перенесение | Да | Да | Нет | Нет |
| Совместим с интерфейсом 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" ))
}