Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contributors wanted! #192

Open
googollee opened this issue Feb 6, 2018 · 62 comments
Open

Contributors wanted! #192

googollee opened this issue Feb 6, 2018 · 62 comments

Comments

@googollee
Copy link
Owner

googollee commented Feb 6, 2018

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.

@kidandcat
Copy link

kidandcat commented Feb 20, 2018

Hi, I want to help if you agree, I always loved socket.io and I want to have it on Go.

UPDATE: after having a look around, I think it could be better to start from scrach as this project is outdated and also is the engine.io

@googollee
Copy link
Owner Author

I didn't check the difference between 1.4 and 2.0. If you say socket.io 2.0, I think starting from scratch maybe a good idea.

@erkie
Copy link
Collaborator

erkie commented Feb 20, 2018

To not have all the work you did @googollee on 1.4 completely out the window, would you mind just describing the performance enhancements you mentioned for the 1.4 branch, compared to the current master version? I'd love to help out here, but I would like to understand a bit more what's been done, what your architectural ideas were, etc?

@googollee
Copy link
Owner Author

The main difference is the 1.4 branch try to avoid too many lockers and separate the transport layer to go-engine.io. The separation makes the implementation of go-socket.io much simpler. The socket created from go-engine.io will call socket.loop() to handle the messages, which is a good start point.

The difference in go-engine.io and old master branch is in http-polling. It will force only one GET or POST at the same time, and the socket above the http-polling will handle Read()/Write() synchronously.

The main part which I didn't finish, is the unit test of some function in go-sockeet.io, and the adapter. The design of the adapter is a interface which can let other sources to put the messages into socket.loop() or somewhere to let the handler receiving them. Then all the redis/broadcast can use a customed adapter to communicate with the socket. And of course, I didn't finish the room/broadcast API in the 1.4 branch, because of the lack of the adapter.

@erkie
Copy link
Collaborator

erkie commented May 30, 2018

@googollee can you add me as contributor on go-engine and go-socket? I can help by checking and merging pull requests to fix bugs that people find.

@googollee
Copy link
Owner Author

@erkie Done. Thank you.

@erkie erkie changed the title Any volunteering contributor? Contributors wanted! Feb 8, 2019
@jjhesk
Copy link

jjhesk commented Feb 18, 2019

what is the status now? have you done any stress test yet? @googollee

@erkie
Copy link
Collaborator

erkie commented Feb 18, 2019

@jjhesk the 1.4 branch has been merged to master, though no major changes have been made for a long time. We'd love if you could write a stress test and help us get good benchmarks for this project.

@jjhesk
Copy link

jjhesk commented Feb 19, 2019

@googollee @erkie some development and perf concepts you might find it helpful.. #172. I have cross reference works from another repo in iris and also found it there we have enough supports to try solving the problems here.

@jjhesk
Copy link

jjhesk commented Feb 19, 2019

@erkie we need a testing plan, example and feature plan example.. its alot of work.

Once the coding is fixed done and the next step we will QA it and make sure all the codes are running solid.

The coverage testing setup should be something like this...

  1. given
    setup plan A. 32 core, 32GB ram, intel, ubuntu 18.0.1. try 65540 open files and process too.
    setup plan B. 16 core, 16GB ram, intel, ubuntu 18.0.1. try 65540 open files and process too.
    setup plan C. 8 core, 8GB ram, intel, ubuntu 18.0.1. try 65540 open files and process too.
    setup plan D. 4 core, 8GB ram, intel, ubuntu 18.0.1. try 65540 open files and process too.

rundown test

  1. stay connected for 10 hrs with some operations maybe 1% of the operations. different clients connected with avg 1-2k clients. different ip (the best).
  2. among all the connections, 5% of them are rapidly disconnects after login mechanism or after some sorts of waited computations.
  3. test all disconnected at once every 5 hrs and reconnecting them again and do that loop.
  4. health check these events:
  • broken pipe
  • refuse connection
  • unable to reconnect or simply stop connect. status 1005, 1006
  • data race detection
  • malformed or broken json serialisations
  • overrided gorountines and causes dead locks
  1. having it to dry run for 2 weeks and see the results.

@pi-pi-miao
Copy link

hi,最近要用socket.io,您的项目有没有一些小的demo之类的,比如在go中怎么去使用,以及golang版本的客户端,这样我可以更好的进行封装压测,谢谢,期待你的回复

@erkie
Copy link
Collaborator

erkie commented Jul 16, 2019

@PyreneGitHub please open a separate ticket if you have a question. Thanks!

@erkie erkie pinned this issue Aug 9, 2019
@sshaplygin sshaplygin mentioned this issue Oct 6, 2019
@sshaplygin
Copy link
Collaborator

@googollee @erkie Hi
I have free time and I can help support issues in this repository.

@erkie
Copy link
Collaborator

erkie commented Oct 11, 2019

@mrfoe7 lovely! I can't add collaborators, @googollee can you fix? More helpers yay! 😃

@googollee
Copy link
Owner Author

@mrfoe7 Thanks in advance. I just send out the invitation, please check.

@sshaplygin
Copy link
Collaborator

@googollee Thanks for you trust.
I will try to do everything possible for project

@odiferousmint
Copy link

Any plans on supporting socket.io 2.3.0, or is there a Go library that does that?

@erkie
Copy link
Collaborator

erkie commented Nov 1, 2019

@DisruptiveMind would not count on it at all unless we can find some passionate people to get that project going. :)

@DisruptiveMind
Copy link
Contributor

DisruptiveMind commented Nov 1, 2019

Hey all, great to see this is still moving along. I'll contribute where I can but I won't be able to commit much at the moment. Count me in as lowly support :)

@erkie
Copy link
Collaborator

erkie commented Nov 1, 2019

@DisruptiveMind nice! :D We need all the help we can get.

@odiferousmint
Copy link

What about socket.io folks? Would they be interested in helping? :D

@sshaplygin
Copy link
Collaborator

sshaplygin commented Nov 5, 2019

@odiferousmint Hi. This issue showed all interest to go-socket.io implementation by nodejs socket.io community
socketio/socket.io#3242

@odiferousmint
Copy link

I wish I could help but I am going to work 12 hours a day really soon so I will not have time for it. :(

@sshaplygin
Copy link
Collaborator

@odiferousmint No problem. It is voluntary activity

@adrianmxb
Copy link
Contributor

Hey @googollee / @erkie / @mrfoe7,
i am using go-socket.io in our backend application and would love to help maintain/update the project.
The next few weeks will be pretty busy for me but after that I might have some time to work on the implementation of v2 (no promises though!).

Did someone already start working on that on their fork?
Would be a step in the right direction to create a dev-v2 branch (or something similiar) on which we can merge progress.

@sshaplygin
Copy link
Collaborator

@adrianmxb Hey. I started work on my fork.
I created dev branch in main repository.

@RinChanNOWWW
Copy link

Are you planning to support socket.io 2.x (and 3.x) in the future? I think I can help.

@erkie
Copy link
Collaborator

erkie commented Jan 7, 2021

We'd love to have support for latest socket.io. Please help!!!!!!!

@erkie erkie reopened this Jan 7, 2021
@AhmedX6
Copy link

AhmedX6 commented Jan 28, 2021

Hello All

maintainers of this project, please need some answers ?
Any telegram group or discord ??

Can we use this implementation for a big project ??

@mrceylan
Copy link

I would also like to help you as much as I can

@erkie
Copy link
Collaborator

erkie commented Feb 26, 2021

Awesome! Feel free to start helping out with issues, improvements and pull requests. :D

@manapoints
Copy link
Contributor

Hi all! I saw that this library is really far behind the official Socket.IO versions, and I'd like to help out as much as I can! Is there any roadmap or anything like that for features that need to be implemented to get the library up to date with the official Socket.IO versions? Thanks :D

@erkie
Copy link
Collaborator

erkie commented Mar 10, 2021

Hey @manapoints super cool that you want to help out. So far this project is pretty unorganized. No roadmap, no real central planning or anything. We know we want it to be uptodate, so any PR that looks good and adds great features without breaking backwards compatibility will surely be merged. I've tried to organize the issues and add helpful labels. I think just finding easy bugs to close is a great way to get into the project. If you want to look into supporting later versions of socket.io, that's awesome too! Feel free to ping me in PR's so I see them quickly.

@sshaplygin
Copy link
Collaborator

@erkie and @adrianmxb are you maintainer this project?

@erkie
Copy link
Collaborator

erkie commented Apr 14, 2021

No, just a collaborater.

@googollee
Copy link
Owner Author

@adrianmxb didn't show up recently. I can't reach him with his email. I tend to remove him out of collaborators if he doesn't reply me in 7 days.

@sshaplygin
Copy link
Collaborator

😢

@erkie
Copy link
Collaborator

erkie commented May 2, 2021

😵

@googollee
Copy link
Owner Author

As #192 (comment), I feel sorry that I removed @adrianmxb. Thank you for your contribution.

@dayueba
Copy link

dayueba commented Mar 7, 2023

Do you still need contributors for this project? I can help solve some issues。

@sshaplygin
Copy link
Collaborator

@dayueba Yes, of course

@linhbkhn95
Copy link

I really wanna contribute to open-source. So,
I would also like to help you as much as I can

@Martin-Karsten
Copy link

Is there some sort of roadmap to make this library compatible with socket.io version 2, 3 or 4?

@sagarishere
Copy link

Given the experiences I had with open-source recently (with auto-GPT where others would take my code and submit their own PR request, and this other would be one of the main maintainers), plus the state of open-source currently, I would not join as maintainer on this project. However, as I see the license, kindly let know if there are any restrictions to use portions of the code in a new project. I want to have a fresh start with upcoming version 5 in mind, and also utilizing wherever I can Golang 1.21, and new features like generics, etc

@erkie
Copy link
Collaborator

erkie commented Aug 11, 2023

@sagarishere you can find the license here: https://github.com/googollee/go-socket.io/blob/master/LICENSE

@sshaplygin
Copy link
Collaborator

sshaplygin commented Aug 22, 2023

Is there some sort of roadmap to make this library compatible with socket.io version 2, 3 or 4?

Nope. Because no one contribute into this project. I haven't free time to this project. If you would like to help, you are welcome

@alanarturohernandez
Copy link

I want to do the functionality to support 2, 3, and 4, but how can I help us?

@erkie
Copy link
Collaborator

erkie commented Sep 5, 2023

@alanarturohernandez awesome!!! make small, targeted and clear pull requests that do this and we'll review them. We don't want to break backwards compatibility if not strictly necessary, so just keep that in mind.

@erkie erkie closed this as completed Sep 5, 2023
@erkie erkie reopened this Sep 5, 2023
@SantiiRepair
Copy link

happy new year guys

@Othie12
Copy link

Othie12 commented Apr 11, 2024

Hello here @googollee , I'd also love to be added as a contributor to this project

@sshaplygin
Copy link
Collaborator

Hey, @Othie12 You could bring new update and can merge updates as can faster as possible

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests