[erlang-questions] What is best way to maintain state in a web-based multiplayer game?

Lloyd R. Prentice lloyd@REDACTED
Wed Jul 16 18:04:09 CEST 2014


Ah, Garrett, you are so damned smart! You hit the nail dead on the head:

"I suspect though your problem is where to start."

I can see most of the pieces, but they are many and each distracts in my mind from the other. This, I suppose, is why I have been obsessed with the idea of architecture; e.g. How the pieces fit together.

But your slice-and-dice the big problems into little problems makes imminent good sense. I shall  do exactly that.

Thank you for dispersing one layer of fog.

All the best,

Lloyd


Sent from my iPad

> On Jul 15, 2014, at 11:19 PM, Garrett Smith <g@REDACTED> wrote:
> 
>> On Tue, Jul 15, 2014 at 12:42 PM,  <lloyd@REDACTED> wrote:
>> Hi Felix,
>> 
>> Thanks for helping me think this through.
>> 
>> - Players do not interact. Each player is playing against the "real world,"
>> e.g. results of their actions. Think of it as project planning with many
>> many contingencies. I'd say "expert system," but that sounds rather hoity
>> toity. I say "game" only in the sense that there are reward points for
>> successful action.
>> 
>> Loop is basically:
>> 
>> - gather facts
>> - make plan
>> - take action
>> - evaluate results
> 
> This is a concrete actionable problem - build the loop. This is
> something you could build with a simple process loop/server just to
> see how things are working (Joe's book is a great resource for taking
> this lower level/direct approach). Later you can convert this over to
> a gen_server or e2 service, plugging it into a proper OTP app.
> 
> But I would not worry about "proper" anything until you have made more
> progress on the core problem, which maybe you're describing in these
> bullet points.
> 
>> - There are universal resources accessed by player state but these, as a
>> whole, are static text, links, and images; wild-eyed estimate: 10 megabytes
> 
> I'd hack and slash this -- hard code stuff into source files -- just
> get it working.
> 
> In the abstract you can serve things via named services very easily.
> 
>> - I estimate that each player will store less than three megabytes of
>> private data.
> 
> What's the easiest, most direct imaginable way to do this in Erlang?
> Do that. (hint: dets)
> 
>> - We're not dealing with elaborate graphics or animations. Only latency is a
>> logic tree or inference engine evaluating facts; e.g. (Looking at Erlang
>> eres/seres; but I may be able get away with something more simple minded).
>> 
>> Latency, in other words, is a function of how many private and shared
>> database lookups are necessary to evaluate a set of condition -> action
>> rules. Effective state management should help me keep rule sets fairly
>> minimal.
> 
> If you can get this stuff working in some fashion -- forget databases,
> keep it in memory, loaded from dev/test source files or config files
> that you can file:consult -- you can back your way into
> persistence/recovery later. And "latency optimization" problems even
> later.
> 
>> Prospects for this game are in the 200K range, but I'm successful with low
>> hundreds of players.
> 
> How about stating with one player? Then two.
> 
>> Ad hoc querying is not necessary.
> 
> I suspect though your problem is where to start. What's the most
> *obvious* thing that you should see working first? It's certainly not
> scaling to 200K anything. It's not latency. Is it the loop above?
> Something else?
> 
> Forget design - stumble through! Erlang is great for that :)
> 
> Garrett



More information about the erlang-questions mailing list