Skip to content

Repository files navigation

socket

PkgGoDevBuild StatuscodecovGo Report CardLICENSE

Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.

Feature

Socket QPS

socket

Get started

Install

go get github.com/hslam/socket

Import

import "github.com/hslam/socket"

Usage

Example

server.go

package main
import (
"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 main
import (
"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 main
import (
"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

License

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

Author

socket was written by Meng Huang.

About

Package socket implements a network socket that supports TCP, UNIX, HTTP, WS and INPROC.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages