Advertisement

Cloudhosting a C# Console Application utilizing UDP

Started by May 27, 2016 12:32 PM
5 comments, last by Gorkadread 8 years, 5 months ago

Greetings!

Background: I've been developing a C# console application to be used as server for a unity-game I'm making. I'm utilizing UDP for the transport of messages between the clients and the server.

Question: Is there a goto-service for these applications? I've been searching but there's precious little about how people go about hosting their serverapplications, unless it's TCP.

Has anyone already looked into this? Currently I'm leaning towards a VM on the Microsoft Azure-service. Pro's cons to that, compared to Amazons services? Is it stupid keeping the server as a console application?

Actually most server apps I know of lack of a UI frontend. That does not mean it can't have a UI frontend, just depends on your use case.

There are a few server "engines" out there that's been mentioned several times like SmartFox, though I believe it's Java, and I am not sure if it's the 'goto' service. And in regards to AWS to Azure, it comes to personal preference. Do understand that once you choose one, you'd usually 'marry' that platform. It'll be another engineering task to move from one to another.

Advertisement
The hosting difference between TCP and UDP isn't that big.
The main question is whether the latency/jitter performance of the virtualized host is sufficient for your use case.
There are many cases where it will be just fine (especially if you "reserve" something that's a "full" computer.)
enum Bool { True, False, FileNotFound };

Actually most server apps I know of lack of a UI frontend. That does not mean it can't have a UI frontend, just depends on your use case.

There are a few server "engines" out there that's been mentioned several times like SmartFox, though I believe it's Java, and I am not sure if it's the 'goto' service. And in regards to AWS to Azure, it comes to personal preference. Do understand that once you choose one, you'd usually 'marry' that platform. It'll be another engineering task to move from one to another.

I have no preference when it comes to using a server with or without UI, it's of little weight when it comes to choosing a serverplattform for me.

Using a serverengine like SmartFox means bringing in a whole new level of functionality that I don't think my game/s will require. The console application I've written fufills pretty much everything I can foresee at this moment, so it's more a question of where it can be hosted.

That's the first part, then there's of course the other things to consider, like, is it easy to update the package once it's installed? Does the hosting support continuous delivery from, say, bitbucket or github? But that's for later :)

The hosting difference between TCP and UDP isn't that big.
The main question is whether the latency/jitter performance of the virtualized host is sufficient for your use case.
There are many cases where it will be just fine (especially if you "reserve" something that's a "full" computer.)

Good point! That's another reason to look at the alternatives of hosting, since I have no idea what latency/jitter/other effects they'll bring and at which level of cost it isn't a problem anymore.

Have you two used any cloudhosting-service to support your applications? If so, are there any pros/cons of them?

Thanks a bunch for the answers you've already given, anything I can learn is golden :)


That's the first part, then there's of course the other things to consider, like, is it easy to update the package once it's installed? Does the hosting support continuous delivery from, say, bitbucket or github? But that's for later :)

Considering it's a C# application, I really doubt AWS would spend much effort in the CD of a C# application. AWS Beanstalk claims no-pain deployment, but I personally architected the CD my own way due to Beanstalk erroring out on me for no reason. And if you are going to host it behind IIS, then maybe it's best to stick to Microsoft technology?

Generally, you'll want to treat deployed infrastructure as "write once."
You'll want a script that takes a fresh OS image, and sets it up as your server.
Run that as your deployment, and ship that OS image.
If you have trouble with a server, no big deal; just trash the image and make/spin up a new one.
This assumes that you run the data store somewhere more permanent though -- anything from a database volume on Elastic Block Store, to a full database service like SimpleDB or BigTable.

I'd suggest trying one of the larger instance offerings on Amazon, and if the performance is not OK, you will need "bare metal" hosting.
Try a M4.xlarge, at about a quarter dollar per hour, and if you have trouble with that, try a C4.8xlarge, at a buck seventy per hour, and if that doesn't work, you go bare metal somewhere else.
The good news with Amazon is that trying something for a few hours is simple and cheap.
The bad news with Amazon is that ongoing costs can add up, especially if you use a lot of bandwidth -- they charge a premium for bandwidth!
Might also want to look into the "enhanced network" capability if you're going to be pushing it hard: https://aws.amazon.com/ec2/faqs/
enum Bool { True, False, FileNotFound };
Advertisement

Considering it's a C# application, I really doubt AWS would spend much effort in the CD of a C# application. AWS Beanstalk claims no-pain deployment, but I personally architected the CD my own way due to Beanstalk erroring out on me for no reason. And if you are going to host it behind IIS, then maybe it's best to stick to Microsoft technology?

IIS is not something I will be using.

Generally, you'll want to treat deployed infrastructure as "write once."
You'll want a script that takes a fresh OS image, and sets it up as your server.
Run that as your deployment, and ship that OS image.
If you have trouble with a server, no big deal; just trash the image and make/spin up a new one.
This assumes that you run the data store somewhere more permanent though -- anything from a database volume on Elastic Block Store, to a full database service like SimpleDB or BigTable.

I'd suggest trying one of the larger instance offerings on Amazon, and if the performance is not OK, you will need "bare metal" hosting.
Try a M4.xlarge, at about a quarter dollar per hour, and if you have trouble with that, try a C4.8xlarge, at a buck seventy per hour, and if that doesn't work, you go bare metal somewhere else.
The good news with Amazon is that trying something for a few hours is simple and cheap.
The bad news with Amazon is that ongoing costs can add up, especially if you use a lot of bandwidth -- they charge a premium for bandwidth!
Might also want to look into the "enhanced network" capability if you're going to be pushing it hard: https://aws.amazon.com/ec2/faqs/

That's a good idea! The one about keeping the server as an image and separate the concerns, aka the db.

I'll look into the M4.xlarge one and see if that's something that's viable for me :)

Thanks a bunch for all the help, I got some things to look at and try now :)

This topic is closed to new replies.

Advertisement