Hi Don,

On 08/11/2010 14:17, Don Dailey wrote:
One possible solution is for the server to force the previous login to disconnect if it thinks that player is currently connected. It will send a quit command to the client and then realize there is no connection and this is trapped.
It's a nice approach - simple and effective - but needs safeguards I think. If two people are using the standard engine pack, the second person who comes along will boot the first off the server. If the first then tries to reconnect, they will boot the second etc.. How about a 1-minute safeguard? An incoming login only boots the current login if it hasn't been heard from for over 1 minute? On 13x13 and 19x19 longer timeouts may be needed.


On time forfeit I could automatically close the connection which should also tell the server what the state of the connection is. It will of course be up to the client to reconnect.
Would the built in client auto-connect work in this circumstance? Good idea in any case =)


I should probably not forfeit games where one of the players has not made at least 1 move - although the previous 2 fixes should prevent that from happening. But this might be useful for debugging new programs.
This sounds like a good idea to me too.

These are great ideas. I think the first idea is the one that really gets to the root of the problem (provided we can avoid the danger of different instances stealing logins when there has been no loss of connection).

A final thought - how about increasing K for games that are lost on time?

Hope this is useful feedback.

Regards

Raffles


Don


On Fri, Nov 5, 2010 at 9:04 PM, Robert Finking <[email protected] <mailto:[email protected]>> wrote:

    Hi Don, All,

    During the current testing cycle of the engine pack, one thing
    I've noticed is the excellent built in facility of the CGOS client
    to handle my internet connection going down. As soon as it goes
    down, it automatically tries to reconnect. However, the server
    doesn't handle this so well.

    The client realises the connection has dropped and tries to log in
    again. The server doesn't notice the client has gone. When the
    client attempts to reconnect, the server thinks it is already
    there. This causes two losses:

    1. The engine can't finish the interrupted game and loses that
    game on time
    2. The server thinks the engine is still connected, so it
    schedules another game for the engine, which it also loses on time.

    The good news is the reconnect does happen after not too long (a
    couple of games go by before the login times out).

    Is it possible to easily improve this? I know from experience that
    detecting a loss of connection can be problematic due to timeouts
    in the network stack. Would it be possible to add some kind of
    Client->Server heartbeat/ping. The client sends a heartbeat say
    once per 10 seconds. If you miss two heartbeats on the trot, you
    automatically kill the login.

    If adding heartbeats is too much, how about just timing out if you
    haven't had a response from the client for over a minute since the
    last move?

    As an easy safeguard against two losses, you could automatically
    log out if a player loses on time.

    Just a thought - hope it helps. Thanks again for an excellent
    setup - there are so many things you have thought of already!

    Raffles



_______________________________________________
Computer-go mailing list
[email protected]
http://dvandva.org/cgi-bin/mailman/listinfo/computer-go

Reply via email to