Contributors wanted! · Issue #192 · googollee/go-socket.io (original) (raw)
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:
- v1.4 separates go-engine.io and go-socket.io to handle transport and RPC.
- 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.