That's a great fix.

Thanks,

-Weston

On Tue, Jun 7, 2011 at 7:30 PM, Ikai Lan (Google) <ika...@google.com> wrote:
> Another possibility could be to lazily calculate turns. When a user has
> either a rich client or web browser open, it pings the server every N
> seconds. The server then evaluates whether it's a new turn or not and does
> the computations at this time. If M turns have passed, the server runs the
> game through M iterations to "catch up" the game.
> Depending on what you're doing, this may be a slightly better
> implementation. Eager updating has the tradeoff of not scaling well, as the
> amount of work is linearly dependent on the number of games. Lazy evaluation
> has the benefit of scaling linearly as a function of the number of *active*
> games (many games will be abandoned), and, you can also "collapse" RPC calls
> to the datastore into a single call instead of repeatedly making them every
> N seconds. For instance: let's say you need to save game state each time.
> Over 10 minutes, you have to make 30 saves per game if you update every 20
> seconds. If it's possible to collapse updating of game state lazily, if a
> user logs out and logs back in 10 minutes later, you can read the game
> state, run it through 10 minutes worth of iterations, and resave it - you've
> just improved your throughput in that scenario by a factor of 30, since
> in-memory local computations are incredibly cheap relative to off machine
> RPCs.
> One of the best practices of building App Engine is to minimize RPCs since
> these are the most expensive parts of your system.
> Ikai Lan
> Developer Programs Engineer, Google App Engine
> Blog: http://googleappengine.blogspot.com
> Twitter: http://twitter.com/app_engine
> Reddit: http://www.reddit.com/r/appengine
>
>
> On Tue, Jun 7, 2011 at 3:26 AM, Ian Marshall <ianmarshall...@gmail.com>
> wrote:
>>
>> Would queued tasks in general, and deferred tasks in particular, suit
>> you? You can set an ETA for these tasks, and GAE/J guarantees not to
>> fire these tasks before any ETA set.
>>
>> You could use a scheduled task for a "heartbeat" of interval 1 minute,
>> and use this to enqueue tasks for ETAs such that you could have queued
>> task "heartbeats" as desired between your 1 minute scheduled task
>> "heartbeats".
>>
>>
>> On Jun 4, 4:07 am, Weston Pace <weston.p...@gmail.com> wrote:
>> > I'm working on an interactive game.  I was hoping for turns to be on
>> > the order of 20 seconds or less.  It appears the cron framework can
>> > only schedule things in 1-minute intervals.  Is there any method for
>> > shorter timers in GAE?
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine for Java" group.
>> To post to this group, send email to
>> google-appengine-java@googlegroups.com.
>> To unsubscribe from this group, send email to
>> google-appengine-java+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to google-appengine-java@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine-java+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-java@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to