Skip to content

doquangtan/socket.io-golang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3ca92b1 · Jan 13, 2025

History

68 Commits
Dec 22, 2024
Nov 26, 2024
Jan 13, 2025
Jan 2, 2025
Jan 2, 2025
Nov 24, 2024
Jan 13, 2025
Nov 24, 2024
Nov 24, 2024
Jan 13, 2025
Jan 13, 2025
Dec 22, 2024
Jan 13, 2025
Nov 26, 2024
Nov 26, 2024
Jan 13, 2025
Jan 12, 2025

Repository files navigation

golang socket.io

  • socket.io is library an implementation of Socket.IO in Golang, which is a realtime application framework.
  • This library support socket.io-client version 3, 4 and only support websocket transport

Contents

Install

Install the package with:

go get github.com/doquangtan/socket.io/v4

Import it with:

import "github.com/doquangtan/socket.io/v4"

and use socketio as the package name inside the code.

Documents

Server

Constructor

socketio.New

Using with standard library net/http

import (
	"net/http"
	socketio "github.com/doquangtan/socket.io/v4"
)

func main() {
	io := socketio.New()

	io.OnConnection(func(socket *socketio.Socket) {
		// ...
	})

	http.Handle("/socket.io/", io.HttpHandler())
	http.ListenAndServe(":3000", nil)
}

Using with web-framework Gin

import (
	"github.com/gin-gonic/gin"
	socketio "github.com/doquangtan/socket.io/v4"
)

func main() {
	io := socketio.New()

	io.OnConnection(func(socket *socketio.Socket) {
		// ...
	})

	router := gin.Default()
	router.GET("/socket.io/", gin.WrapH(io.HttpHandler()))
	router.Run(":3300")
}

Using with web-framework Go Fiber

import (
	"github.com/gofiber/fiber/v2"
	socketio "github.com/doquangtan/socket.io/v4"
)

func main() {
	io := socketio.New()

	io.OnConnection(func(socket *socketio.Socket) {
		// ...
	})

	app := fiber.New(fiber.Config{})
	app.Use("/", io.FiberMiddleware) //This middleware is to attach socketio to the context of fiber
	app.Route("/socket.io", io.FiberRoute)
	app.Listen(":3000")
}

Events

Event: 'connection'

io.OnConnection(func(socket *socketio.Socket) {
	// ...
})

Methods

server.emit(eventName[, ...args])

io.Emit("hello")
io.Emit("hello", 1, "2", map[string]interface{}{"3": 4})

server.of(nsp)

adminNamespace := io.Of("/admin")

adminNamespace.OnConnection(func(socket *socketio.Socket) {
	// ...
})

server.to(room)

io.To("room-101").Emit("hello", "world")

server.fetchSockets()

sockets := io.Sockets()

Namespace

Events

Event: 'connection'

Fired upon a connection from client.

// main namespace
io.OnConnection(func(socket *socketio.Socket) {
	// ...
})

// custom namespace
io.Of("/admin").OnConnection(func(socket *socketio.Socket) {
	// ...
})

Methods

namespace.emit(eventName[, ...args])

io.Of("/admin").Emit("hello")
io.Of("/admin").Emit("hello", 1, "2", map[string]interface{}{"3": 4})

namespace.to(room)

adminNamespace := io.Of("/admin")

adminNamespace.To("room-101").Emit("hello", "world")

adminNamespace.To("room-101").To("room-102").Emit("hello", "world")

namespace.fetchSockets()

Returns the matching Socket instances:

adminNamespace := io.Of("/admin")

sockets := adminNamespace.Sockets()

Socket

Events

Event: 'disconnect'

io.OnConnection(func(socket *socketio.Socket) {
	socket.On("disconnect", func(event *socketio.EventPayload) {
		// ...
	})
})

Methods

socket.on(eventName, callback)

Register a new handler for the given event.

socket.On("news", func(event *socketio.EventPayload) {
	print(event.Data)
})

with several arguments

socket.On("news", func(event *socketio.EventPayload) {
	if len(event.Data) > 0 && event.Data[0] != nil {
		print(event.Data[0])
	}
	if len(event.Data) > 1 && event.Data[1] != nil {
		print(event.Data[1])
	}
	if len(event.Data) > 2 && event.Data[2] != nil {
		print(event.Data[2])
	}
})

or with acknowledgement

socket.On("news", func(event *socketio.EventPayload) {
	if event.Ack != nil {
		event.Ack("hello", map[string]interface{}{
			"Test": "ok",
		})
	}
})

socket.join(room)

Adds the socket to the given room or to the list of rooms.

io.Of("/test").OnConnection(func(socket *socketio.Socket) {
	socket.Join("room 237")

	io.To("room 237").Emit("a new user has joined the room")
})

socket.leave(room)

Removes the socket from the given room.

io.Of("/test").OnConnection(func(socket *socketio.Socket) {
	socket.Leave("room 237");

	io.To("room 237").Emit("the user has left the room")
})

Rooms are left automatically upon disconnection.

socket.to(room)

socket.On("room 237", func(event *socketio.EventPayload) {
 	// to one room
	socket.To("room 237").Emit("test", "hello")

	// to multiple rooms
	socket.To("room 237").To("room 123").Emit("test", "hello")
})

Example

Please check more examples into folder in project for details. Examples

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published