Content
With every large online multiplayer match based game has a matchmaking server for players to be paired with and against each other using a single click. This model avoids using a server list system, as there are no private host servers as of now.
These are the tools and technologies that I'm using:
Here's how I used them...
ASP.NET
I've restarted this particular project at least four times. The first try was with node.js, and I was able to set up sending and receiving information quite easily. However, I realized that I was going to be a little more limited, especially since I have used very little JavaScript. Through my research, I found that .NET would be a good place to start. It seemed to have a lot of different techs that could help me out with a little bit of work, and it's also in C#, a language I'm familiar with. I went through a few iterations on different versions of .NET until I eventually landed on ASP.NET.
Once I got the server up and running, I was able to send and receive data with standard verb requests. Unfortunately, this was still far from what's needed for a matchmaking server. The next step is getting two way communication between the server and the clients.
WebSockets
WebSockets come in to fix up the problem mentioned before: two way communication. With standard verb requests, a client sends a request to the server, and the server can respond. However, the server can't send information to a client without the initial request. WebSockets fix this issue by opening a two-way road for communication, which will allow the server to send information when it needs to, like when a match was found, for example. WebSockets open a lot of doors for quality of life changes that I can later implement into Impulse. Private messages will be built on top of this system, where one client sends a chat to the server, and the server finds the recipient's websocket and sends the chat to them through it. In the same way, it allows the server to send notifications to clients when something happens, like a party request, a friend coming online, and important server messages.
Net4j
When determining how I wanted to store accounts, I started with MySQL since I was familiar with its capabilities. I quickly realized that setting up friends lists and temporary connections would be a pain to set up. After doing some more research, I came across Neo4j, a solution that I could host myself, and allowed for connections between nodes (and they could be shown visually too!). These nodes are going to be accounts, and their connections will be how friendships are made. Neo4j uses a language very similar to SQL called CQL. This meant that picking up the language was easy, and I could quickly fill in some new query code where my old SQL sat. Connecting to the database is quick, and all handled by the matchmaking server... which is now becoming much more than just a matchmaking server.