- Notifications
You must be signed in to change notification settings - Fork2
Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.
License
NotificationsYou must be signed in to change notification settings
hslam/socket
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.
- TCP/UNIX/HTTP/WS/INPROC
- Epoll/Kqueue
- TLS
go get github.com/hslam/socket
import "github.com/hslam/socket"
server.go
package mainimport ("flag""github.com/hslam/socket")varnetworkstringvaraddrstringfuncinit() {flag.StringVar(&network,"network","tcp","-network=tcp, unix, http or ws")flag.StringVar(&addr,"addr",":8080","-addr=:8080")flag.Parse()}funcmain() {sock,err:=socket.NewSocket(network,nil)iferr!=nil {panic(err)}l,err:=sock.Listen(addr)iferr!=nil {panic(err)}for {conn,err:=l.Accept()iferr!=nil {panic(err)}gofunc(conn socket.Conn) {messages:=conn.Messages()buf:=make([]byte,65536)for {msg,err:=messages.ReadMessage(buf)iferr!=nil {break}messages.WriteMessage(msg)}messages.Close()}(conn)}}
server_poll.go
package mainimport ("flag""github.com/hslam/socket""sync")varnetworkstringvaraddrstringfuncinit() {flag.StringVar(&network,"network","tcp","-network=tcp, unix, http or ws")flag.StringVar(&addr,"addr",":8080","-addr=:8080")flag.Parse()}funcmain() {sock,err:=socket.NewSocket(network,nil)iferr!=nil {panic(err)}l,err:=sock.Listen(addr)iferr!=nil {panic(err)}bufferPool:=&sync.Pool{New:func()interface{} {returnmake([]byte,65536) }}l.ServeMessages(func(messages socket.Messages) (socket.Context,error) {returnmessages,nil},func(context socket.Context)error {messages:=context.(socket.Messages)buf:=bufferPool.Get().([]byte)deferbufferPool.Put(buf)msg,err:=messages.ReadMessage(buf)iferr!=nil {returnerr}returnmessages.WriteMessage(msg)})}
client.go
package mainimport ("flag""fmt""github.com/hslam/socket")varnetworkstringvaraddrstringfuncinit() {flag.StringVar(&network,"network","tcp","-network=tcp, unix, http or ws")flag.StringVar(&addr,"addr",":8080","-addr=:8080")flag.Parse()}funcmain() {sock,err:=socket.NewSocket(network,nil)iferr!=nil {panic(err)}conn,err:=sock.Dial(addr)iferr!=nil {panic(err)}messages:=conn.Messages()buf:=make([]byte,65536)fori:=0;i<1;i++ {err:=messages.WriteMessage([]byte("Hello World"))iferr!=nil {panic(err)}msg,err:=messages.ReadMessage(buf)iferr!=nil {panic(err)}fmt.Println(string(msg))}}
Output
Hello World
This package is licensed under a MIT license (Copyright (c) 2020 Meng Huang)
socket was written by Meng Huang.