engineio

package module
v1.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 10, 2019 License: BSD-3-Clause Imports: 15 Imported by: 94

README

go-engine.io

GoDoc Build Status Coverage Status

go-engine.io is the implement of engine.io in golang, which is transport-based cross-browser/cross-device bi-directional communication layer for go-socket.io.

It is compatible with node.js implement, and supported long-polling and websocket transport.

Install

Install the package with:

go get github.com/googollee/go-engine.io@v1

Import it with:

import "github.com/googollee/go-engine.io"

and use engineio as the package name inside the code.

Example

Please check example folder for details.

package main

import (
	"encoding/hex"
	"io/ioutil"
	"log"
	"net/http"

	"github.com/googollee/go-engine.io"
)

func main() {
	server, _ := engineio.NewServer(nil)

	go func() {
		for {
			conn, _ := server.Accept()
			go func() {
				defer conn.Close()
				for {
					t, r, _ := conn.NextReader()
					b, _ := ioutil.ReadAll(r)
					r.Close()

					w, _ := conn.NextWriter(t)
					w.Write(b)
					w.Close()
				}
			}()
		}
	}()

	http.Handle("/engine.io/", server)
	log.Println("Serving at localhost:5000...")
	log.Fatal(http.ListenAndServe(":5000", nil))
}

License

The 3-clause BSD License - see LICENSE for more details

Documentation

Index

Examples

Constants

View Source
const (
	// TEXT is text type message.
	TEXT = FrameType(base.FrameString)
	// BINARY is binary type message.
	BINARY = FrameType(base.FrameBinary)
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Conn

type Conn interface {
	ID() string
	NextReader() (FrameType, io.ReadCloser, error)
	NextWriter(typ FrameType) (io.WriteCloser, error)
	Close() error
	URL() url.URL
	LocalAddr() net.Addr
	RemoteAddr() net.Addr
	RemoteHeader() http.Header
	SetContext(v interface{})
	Context() interface{}
}

Conn is connection.

type Dialer added in v1.4.1

type Dialer struct {
	Transports []transport.Transport
}

Dialer is dialer configure.

func (*Dialer) Dial added in v1.4.1

func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (Conn, error)

Dial returns a connection which dials to url with requestHeader.

type FrameType added in v1.4.1

type FrameType base.FrameType

FrameType is type of a message frame.

type Options added in v1.4.1

type Options struct {
	RequestChecker     func(*http.Request) (http.Header, error)
	ConnInitor         func(*http.Request, Conn)
	PingTimeout        time.Duration
	PingInterval       time.Duration
	Transports         []transport.Transport
	SessionIDGenerator SessionIDGenerator
}

Options is options to create a server.

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server is server.

Example
eio, err := NewServer(nil)
if err != nil {
	log.Fatalln("server error:", err)
}
httpSvr := httptest.NewServer(eio)
defer httpSvr.Close()

for {
	conn, err := eio.Accept()
	if err != nil {
		log.Fatalln("accept error:", err)
		return
	}
	go func(conn Conn) {
		defer conn.Close()
		fmt.Println(conn.ID(), conn.RemoteAddr(), "->", conn.LocalAddr(), "with", conn.RemoteHeader())

		for {
			typ, r, err := conn.NextReader()
			if err != nil {
				log.Fatalln("read error:", err)
				return
			}
			w, err := conn.NextWriter(typ)
			if err != nil {
				log.Fatalln("write error:", err)
				return
			}
			_, err = io.Copy(w, r)
			if err != nil {
				log.Fatalln("copy error:", err)
				return
			}
			err = w.Close()
			if err != nil {
				log.Fatalln("close writer error:", err)
				return
			}
		}
	}(conn)
}
Output:

func NewServer

func NewServer(opts *Options) (*Server, error)

NewServer returns a server.

func (*Server) Accept

func (s *Server) Accept() (Conn, error)

Accept accepts a connection.

func (*Server) Close added in v1.4.1

func (s *Server) Close() error

Close closes server.

func (*Server) ServeHTTP

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)

type SessionIDGenerator added in v1.4.1

type SessionIDGenerator interface {
	NewID() string
}

SessionIDGenerator generates new session id. Default behavior is simple increasing number. If you need custom session id, for example using local ip as perfix, you can implement SessionIDGenerator and save in Configure. Engine.io will use custom one to generate new session id.

Directories

Path Synopsis
demo
web
Package packet is codec of packet for connection which supports framing.
Package packet is codec of packet for connection which supports framing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL