Recently, I’ve received several emails asking about the status of my real-time collaboration platform project. So, I decided to take a few minutes to address this with a quick blog post. In case you aren’t familiar with my RTC platform, you can get an idea of it here. Basically, I am working on building a platform that will allow others to create any type of server that involves multiple users. For example, if you wanted to create your own chat server, you could use my platform as a starting point and would only have to write a few lines of code to make it work. If you wanted to create a streaming HTTP server, video conferencing server, or audio chat server, again, you would use my platform as the base foundation for your application. My platform works by allowing anyone to quickly and easily get a multi-user server up and running in no time. Let’s take a look at another real-world example of where my platform could be used.
Let’s pretend you’re interested in creating your own multi-player video game, but would rather focus on the actual gameplay instead of writing code to juggle multiple users. To do that, you would implement my platform which allows you to create “lobbies” where users can share information and data. For example, when a user first logs onto the server, they would not be in a lobby. Instead, they could pass the “list lobbies” command which would return a list of all lobbies that are currently registered on the server or they could issue the “join lobby” command to, well, join a lobby. If the user issues the “join lobby” command by itself, the server will search for a lobby that has available room and will dump the user into that lobby. On the other hand, a user could issue the “join lobby” command and pass it the name of a lobby. If the lobby the user specifies has sufficient space, the user will be automatically dropped into that room, otherwise a “too many users exception” would be returned. If a user passes a lobby name along with the “join lobby” command and that lobby doesn’t exist, it would be auto-created and the user would become the “lobby leader”. Of course, the application designer could decide whether or not users can create new lobbies or not.
Once a user joins a lobby, they can issue the “list users” command to see all of the other users within that lobby. Each user in the lobby has a minimum of 4 channels to the server. The first channel is for text. The second channel is for audio. The third channel is for video. And, the fourth channel is for raw data. To simplify this, a user gets 1 connection made back to the server, but can send multiple / different data formats to the server over the same connection. It is up to the server designer to decide which channels will be accessible to their users. Plus, by having separate channels for each data type, channels can be turned on and off during runtime by the end user which would help with bandwidth issues.
I am designing my platform so that it’s completely asynchronous. This means that when a client sends a request to the server, other clients don’t have to get in line and wait. Instead, they too can send server requests and get responses without the server hanging up from things like I/O. With my platform, designers will be able to utilize my API for handling all of the things that would normally take years for someone to design from scratch like event delegation and data-transfers.
With my platform, system designers don’t have to worry about writing the code to handle multiple users. Designers don’t have to write code to take incoming packets from a client and redistribute them to all of the other clients within the same lobby. Designers don’t have to worry about writing code to limit how many users can join a single lobby or how to handle different data types such as audio, video, and text. Instead, designers can focus on the actual gameplay and can use my platform to handle the rest.
So, as you can see from the example above, my platform will handle all of the pieces required to get up and running a multi-user application. And, like the example above, I have already begun working with a few others for creating some multiplayer games which will run on top of my platform. I have also already begun working on a few starter servers for things like HTTP, FTP, real-time document collaboration, video conferencing, and tele-conferencing. I will also be providing example client applications for each of the server types mentioned. I will try my best to provide examples in Python, Java, C#, and PHP. I hope to have something ready to be released within the next few months. I wanted to have it ready sooner, but have found myself adding more and more functionality before the first release will be ready. Stay tuned!
PayPal will open in a new tab.