GHads mind

developers thoughts & finds

Posts Tagged ‘gae

Introducing GW2co.net – GuildWars2 Commander Overlay

leave a comment »

Hi folks,

as the creator of http://www.gw2co.net I’m using my blog to promote this little goody 🙂

What is it? It’s a windows 7+ application/overlay above GuildWars2 showing timers and team movements for a game mode called World vs. World. Here three home worlds/servers combat each other player vs. player for a week by killing other raids or conquering castles, towers and supply camps.

GW2co.net now enriches this in multiple ways:

– Cooperative team play by seeing where other teams are heading to. You may have a coordinater in Teamspeak ordering teams to go here and there
– Know beforehand if the camp you’re heading to with your raid still has a timer
– Predict enemy movements be looking at the map overview
– Allows for visibile scouts too so a leader can see which objectives are protected by manpower
– Getting infos about who has claimed an objective and how long it is held

The cool thing about this is the work-out-of-the box character. You as GW2 player just fire up the game and join a WvW map. The GW2co.net Client (after you logged in) can automaticly pick up the map and your character and will (not yet implemented) place you into the correct team based on the leaders teamname and your login. There is nearly zero interaction needed but the team leader will see the new player as a team member.

The client is free and our complete server infrastructure that is able to support thousands of players at the same time costs (incl. Domain) not even 10$ a month. On the technology side we are using many technologies like ZeroMQ, Google AppEngine with Gaelyk and Protocolbuffers. We’ve overcome OS and program language boundaries and created a secure communication over an unsecure tcp socket. There were many challanges and I hope to have the time to blog details here about some of them.

It took me and a friend (plus some recently joined supporters) a year now from idea to the current closed Beta Version and I hope a public Beta for my whole home world “Elonareach” will be ready within four weeks.

Stay tuned,
GHad

Advertisements

Written by ghads

June 23, 2014 at 3:53 pm

Disable Gaelyk reloading routes on every Request in DEV mode

leave a comment »

I’m working on a little client/server app with C# WPF 4.5 as frontend and Gaelyk on Google App Engine (GAE) as server backend. While testing the load of my app on development server, I discovered a high single core load on my server and a very bad response time once the requests per second was higher than around 10.

After some testing hours I found that Gaelyk reloades the routes.config file on every request to check for changes as I didn’t have timestamps on my filesystem or I did not start with admin rights. Anyway instead of checking if the file has changed, the RoutesFilter always creates a new GroovyShell and runs the routes.config as script, thus compiling it which in turn resulted in a high single core load and a bad request time. As you can imagine constant recompiling stresses the server and I observed a delay of 150ms per request just for reevaluating the routes.config file on every request. Wow, that sums up quickly.

Well, in production mode this will not be done and on deveploment mode this is normaly not a problem but in my case I have many users that query the server once a second and the check for file modification is not working.

But as I do not change the routes often (and if I will just have to restart Gaelyk) I looked around how to disable this behaviour and discovered you can configure your own route filter in web.xml

    <!-- Use custom routes filter to disable reloading of routes.config for every request for development server -->
    <filter>
        <filter-name>RoutesFilter</filter-name>
        <filter-class>utils.NoReloadRoutesFilter</filter-class>
    </filter>

Then just extend the RouteFilter class:

package utils

import groovyx.gaelyk.routes.RoutesFilter;

class NoReloadRoutesFilter extends RoutesFilter 
{
	private boolean init = false
	
	@Override
	synchronized void loadRoutes() {
		if (!init) 
		{
			 init = true
			 super.loadRoutes()
		}
	}
}

That’s it. It may be an uncommen problem but it was a problem for me 🙂

Greetings,
GHad

Written by ghads

November 15, 2013 at 6:50 pm

Posted in Uncategorized

Tagged with , , , ,