<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">There is no hard requirement for a
RESTful API, but since this API will be used in a wide variety of
places (e.g., web/html5 games, mobile, flash, etc) and not just
internally, we decided having a RESTful API would be a good idea
and make using the API in development quicker/easier.<br>
<br>
On 12/6/2012 18:42, Steve Davis wrote:<br>
</div>
<blockquote
cite="mid:51c212fa-185d-45e1-ad97-815ce1cde94f@googlegroups.com"
type="cite">From what you've said, I would guess that the correct
answer is:
<div>2) memcached protocol</div>
<div><br>
</div>
<div>SinceĀ </div>
<div><br>
</div>
<div>Your solution (1) starts with "When a client requests data on
a player, spawn 1 player process." If that had been "when a
client requests data on themselves from another game" then it
could have been in the running...</div>
<div><br>
</div>
<div>A memcached implementation will sort out LRU without you
having to reinvent (stabilize, test) a wheel.</div>
<div><br>
</div>
<div>Not sure why there's a REST requirement. If this MUST be HTTP
then I see it, otherwise what does it do for you?</div>
<div><br>
</div>
<div>My 2c,</div>
<div>/s<br>
<div><br>
On Thursday, December 6, 2012 3:43:22 PM UTC-6, David Fox
wrote:
<blockquote class="gmail_quote" style="margin: 0;margin-left:
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I'm
currently developing a gaming server which stores player
information <br>
that can be accessed from any of our games via a REST API.
<br>
<br>
So far I've thought of two ways to structure and cache
player data:
<br>
<br>
1. When a client requests data on a player, spawn 1 player
process. This <br>
process handles: all subsequent requests from clients for
this player, <br>
retrieving the player data from the DB when created and
periodically <br>
updating the DB with any new data from clients. If the
player is not <br>
requested by another client within... say 30 minutes, the
player process <br>
will terminate.
<br>
<br>
2. Just keep previously requested data in a distributed LRU
cache (e.g., <br>
memcached, redis, mnesia)
<br>
<br>
Out of the two, I prefer #1 since it would allow me to
separate the <br>
functionality of different "data types" (e.g., player data,
game data).
<br>
<br>
There are just 2 problems with doing it this way that I'd
like your <br>
thoughts and help with:
<br>
I. I would have to implement some sort of "LRU process
cache" so I could <br>
terminate processes to free memory for new ones.
<br>
II. If a load balancer connects a client to node #1, but the
process for <br>
the requested player is on node #2, how can the player
process on node <br>
#2 send the data to the socket opened for the client on node
#1. Is it <br>
possible to somehow send an socket across nodes? The reason
I ask, is <br>
that I'd like to prevent sending big messages across nodes.
<br>
<br>
Thanks for the help!
<br>
______________________________<wbr>_________________
<br>
erlang-questions mailing list
<br>
<a moz-do-not-send="true" href="javascript:" target="_blank"
gdf-obfuscated-mailto="eJX3uogvCAsJ">erlang-q...@erlang.org</a>
<br>
<a moz-do-not-send="true"
href="http://erlang.org/mailman/listinfo/erlang-questions"
target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a>
<br>
</blockquote>
</div>
</div>
</blockquote>
<br>
</body>
</html>