Skip to content
This repository was archived by the owner on Sep 29, 2024. It is now read-only.
This repository was archived by the owner on Sep 29, 2024. It is now read-only.

Contributors wanted!  #192

Closed
Closed
@googollee

Description

@googollee

JOIN OUR TELEGRAM CHAT: https://t.me/go_socketio

TL;DR, Anyone wants to take over this project? I hope someone can help me to maintain it.

  • Background

I created this project when I needed it during my work. The code was 0.9.x branch which corresponded to socket.io 0.9.x. That branch worked OK, but the code itself was very ugly and low-performance.

So after a while, I started working on the v1.4 branch, when socket.io was 1.4 at that time. But I had changed my work at that time, and the new work didn't require socket.io. I wanted to use unit test to make it right but looked not good.

Currently, I leave master as 0.9.x because I don't want to break anyone's project by the huge change. (Blame package managing of Go.) So even the master branch should be the latest code, it isn't. You can use gopkg.in/googollee/go-socket.io.v1 as importing path if you want to use v1.4. Or you can use dep or any pkg manager you like.

As my work doesn't require socket.io now and I focus on learning English recently, I don't have time to maintain this project. I hope any volunteer can take over it.

  • Architecture

This part writes for the potential maintainer. I'd like to give you a brief idea how to dive into the code.

The main differences between 0.9.x and v1.4 are listed below:

  1. v1.4 separates go-engine.io and go-socket.io to handle transport and RPC.
  2. v1.4 tries to reduce the threads.

go-engine.io handles all kinds of transport, like HTTP polling or WebSocket, and turns them into a socket-like interface. it also handles transport upgrading and maintains the session. If a connection breaks and reconnects in a certain time with the same session id, go-engine.io will treat them as same one and will send all data during the breaking time to the new connection.

A WebSocket connection can map to a socket-like interface easily, but not HTTP polling. For HTTP polling, I try to make all read in one thread(more accurate, in one goroutine) and all write in another. Each thread only handles one HTTP request at a time. I try not to let read and write interrupted each other.

I hope this part is good enough to understand and may help when diving into the code.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions