Adventures with Photon and Unity3d

The unity3d hospital I have been working on has, up to now, been running on the Photon Cloud. (Photon server from Exit games is a socket server that allows client applications like those in Unity3d to talk to one another. They run a simple to use hosted version called Photon Cloud which is great for testing things out.
I decided though that some of the traffic we were pushing through might break the tiers for hosting on the cloud so thought I would run my own server. It was not the concurrent user as we have a few users, but they do a lot. Rather than a lot of users doing a little which is the general profile for gaming.
Unity dev
In part that is because on of the unity clients acts as the master for the application. It holds a lot of simulation data and changes to that have to be communicated (in various cached ways). If I had built it as server logic we may have cut down on traffic but would have to stick to a single way of working. As it is the application is also designed to fall back to disconnected mode and can be run as a non network demo (though that has its own challenges).
I did have a few difficulties to start off with but many of those were actually very simple to solve, and if you read some of the annotations in the docs they all make sense.
I sparked up a rackspace windows 2008r2 server first. Photon is windows based. I had dabbled with the Azure cloud hosting version for it but much of that required a windows development environment to deploy to and I am a Mac user with occasional windows use 🙂 So it was much simpler to have a rackspace server and use the remote desktop to attach to it.
Downloading the files via the remote desktop was a problem to start off with due to all the various firewall restrictions, so there was a bit of clicking around windows admin.
I followed the 5 minute setup (kind of). Once downloaded you just end up with a set of bin directories for the Photon control and directories with the various server applications and configurations.
Remote Desktop ConnectionScreenSnapz001
All I needed was a lobby host and then simple game rooms to hold broker the data flow and RPC calls. I had not extra server logic. If something moves in unity3d on one client it needs to move on the other.
I didn’t have much luck having asked photon to start the Default application. I was not getting connected so I added a few extra firewall rules just to be on the safe side. I was starting to wonder if I could get to the hosted machine at all but I think there were some other network problems conspiring to confuse me too.
Then I read that if you are switching from Photon Cloud to your own server you should use the other application configuration, cunningly named Loadbalancing(MyCloud). I switched to that and ran the test client on the actual server and things seemed better. Still no luck connecting from unity3d though. Then I looked at the menu option that said Game Server IP config. It was set to a local address, so obviously the server was not going to be letting itself be known to the outside world. A simple click to autodetect public IP and I was able to connect from unity3d.
It all seemed good until after a few connects and disconnects it started to throw all sorts of errors.
I had to ask on the forum and on twitter, but just asking the question I started to think what I was actually doing and what I was running. I was glad of the response from Exit Games though as it meant that I was going along the right path.
Again it is obvious but… The mycloud application config that I was using had 1 master server and 2 game servers it did say it was not for production, but as this is not a massive scale game I thought I wouldn’t touch any configs. It looked like the master server was getting to a point of asking each game server who was the least busy (to direct traffic to) and getting an answer that they were both maxed out. I initially thought I needed to add more game servers, but it was actually the opposite. Removing one of the game servers from the config (effectively removing and load balancing logic) meant the same game server got the connections. The loadbalancer is really there for other machines to be brought into mix.
Having thought that was what was happening I cut the config files but still found after 30 mins running I got conflict. I did say that in the forum post too. However I had not fully rebooted the windows box only restarted the photon server. I think there is a lot of shared memory and low level resources in play. A few reboots and restarts and things seem to be behaving themselves.
The test will be today when the scenario is run with several groups of 5 users, but all running voice too.
Unity server buttons
I have put some server fallback code in though to allow us to switch back to the Photon Cloud if my server fails. For a while I was publishing two version one for cloud and one for my server. That was getting impractical as each upload on my non infinity broadband was taking 45 mins. So any changes had a 90+ minute roundtrip not including the fix.

Leave a Reply

Your email address will not be published. Required fields are marked *

EubXSuLAu saw

Please type the text above:

This site uses Akismet to reduce spam. Learn how your comment data is processed.