elio
means event loop io library.
This library allows you to quickly write epoll-based servers.
elio
libraryEcho
Echo
is a simple echo server.
Herald
Herald
is a simple MQTT pub/sub test client.
Echo
app/echo
is simple echo server written by elio
.
This is the main function of app/echo
:
package main
import (
"github.com/cppis/elio"
)
func main() {
app := elio.Elio()
echo := NewEcho(app)
app.Register(echo)
app.Run()
app.Wait()
}
The echo
generated by NewEcho
is a implementation of elio
service interface:
elio
service interface has following method signatures:
package elio
import (
"context"
"time"
)
// Service service
type Service interface {
Name() string
OnInit(ctx context.Context, cancel context.CancelFunc) error
OnExit()
OnOpen(s *Session) error
OnClose(s *Session, err error)
OnError(s *Session, err error)
OnRead(s *Session, in []byte) int
OnWrite(s *Session, out []byte)
OnLoop(host *IoHost, t time.Time, d time.Duration)
}
If network I/O event happens, elio
calls proper event method of service.
This is a event implementations of echo
service:
func (e *Echo) OnOpen(s *elio.Session) error {
fmt.Printf("o")
return nil
}
func (e *Echo) OnClose(s *elio.Session, err error) {
fmt.Printf("c")
}
func (e *Echo) OnError(s *elio.Session, err error) {
fmt.Printf("e")
}
func (e *Echo) OnRead(s *elio.Session, in []byte) (processed int) {
fmt.Printf("+%d", len(in))
s.Write(in)
if 'q' == in[0] {
elio.Elio().End()
}
return processed
}
func (e *Echo) OnWrite(s *elio.Session, out []byte) {
fmt.Printf("-%d", len(out))
}
Service also has loop callback for running logics at regular intervals:
const (
// defaultFetchLimit default fetch limit
defaultFetchLimit int = 2000
)
func (e *Echo) OnLoop(host *elio.IoHost, t time.Time, d time.Duration) {
//host.RunDivision(t, r.callbackDivision)
_, _ = host.Dispatching(t, defaultFetchLimit)
e.prev = t
}