https://github.com/hslam/socket
Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.
https://github.com/hslam/socket
epoll fast go golang http inproc kqueue netpoll tcp tls unix ws
Last synced: 24 days ago
JSON representation
Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.
- Host: GitHub
- URL: https://github.com/hslam/socket
- Owner: hslam
- License: mit
- Created: 2020-06-27T13:21:30.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-17T14:00:51.000Z (about 2 years ago)
- Last Synced: 2025-03-30T11:32:41.391Z (about 2 months ago)
- Topics: epoll, fast, go, golang, http, inproc, kqueue, netpoll, tcp, tls, unix, ws
- Language: Go
- Homepage:
- Size: 137 KB
- Stars: 3
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# socket
[](https://pkg.go.dev/github.com/hslam/socket)
[](https://github.com/hslam/socket/actions)
[](https://codecov.io/gh/hslam/socket)
[](https://goreportcard.com/report/github.com/hslam/socket)
[](https://github.com/hslam/socket/blob/master/LICENSE)Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.
## Feature
* TCP/UNIX/HTTP/WS/INPROC
* [Epoll/Kqueue](https://github.com/hslam/netpoll "netpoll")
* TLS## [Benchmark](https://github.com/hslam/socket-benchmark "socket-benchmark")
##### Socket QPS
## Get started
### Install
```
go get github.com/hslam/socket
```
### Import
```
import "github.com/hslam/socket"
```
### Usage
#### Exampleserver.go
```go
package mainimport (
"flag"
"github.com/hslam/socket"
)var network string
var addr stringfunc init() {
flag.StringVar(&network, "network", "tcp", "-network=tcp, unix, http or ws")
flag.StringVar(&addr, "addr", ":8080", "-addr=:8080")
flag.Parse()
}func main() {
sock, err := socket.NewSocket(network, nil)
if err != nil {
panic(err)
}
l, err := sock.Listen(addr)
if err != nil {
panic(err)
}
for {
conn, err := l.Accept()
if err != nil {
panic(err)
}
go func(conn socket.Conn) {
messages := conn.Messages()
buf := make([]byte, 65536)
for {
msg, err := messages.ReadMessage(buf)
if err != nil {
break
}
messages.WriteMessage(msg)
}
messages.Close()
}(conn)
}
}
```server_poll.go
```go
package mainimport (
"flag"
"github.com/hslam/socket"
"sync"
)var network string
var addr stringfunc init() {
flag.StringVar(&network, "network", "tcp", "-network=tcp, unix, http or ws")
flag.StringVar(&addr, "addr", ":8080", "-addr=:8080")
flag.Parse()
}func main() {
sock, err := socket.NewSocket(network, nil)
if err != nil {
panic(err)
}
l, err := sock.Listen(addr)
if err != nil {
panic(err)
}
bufferPool := &sync.Pool{New: func() interface{} { return make([]byte, 65536) }}
l.ServeMessages(func(messages socket.Messages) (socket.Context, error) {
return messages, nil
}, func(context socket.Context) error {
messages := context.(socket.Messages)
buf := bufferPool.Get().([]byte)
defer bufferPool.Put(buf)
msg, err := messages.ReadMessage(buf)
if err != nil {
return err
}
return messages.WriteMessage(msg)
})
}
```client.go
```go
package mainimport (
"flag"
"fmt"
"github.com/hslam/socket"
)var network string
var addr stringfunc init() {
flag.StringVar(&network, "network", "tcp", "-network=tcp, unix, http or ws")
flag.StringVar(&addr, "addr", ":8080", "-addr=:8080")
flag.Parse()
}func main() {
sock, err := socket.NewSocket(network, nil)
if err != nil {
panic(err)
}
conn, err := sock.Dial(addr)
if err != nil {
panic(err)
}
messages := conn.Messages()
buf := make([]byte, 65536)
for i := 0; i < 1; i++ {
err := messages.WriteMessage([]byte("Hello World"))
if err != nil {
panic(err)
}
msg, err := messages.ReadMessage(buf)
if err != nil {
panic(err)
}
fmt.Println(string(msg))
}
}
```**Output**
```
Hello World
```### License
This package is licensed under a MIT license (Copyright (c) 2020 Meng Huang)### Author
socket was written by Meng Huang.