ID:277883
 
Hello,
I'm looking at making an Automatic Boot system for players that have too high a ping for too long (e.g. 30 sedconds - 1 minute), but a high ping is somewhat... subjective.
I was hoping I could get each of you to simply reply with what you consider your average ping to be on game(s).
If you know the location of the server(s), could you also mention yours and the server's locations?

In order to check your ping, type ".ping" into the command box of a game, and it will display your ping in the small "Options & Messages" window. Do it periodically to work out your avg ping.

Thanks for your help.
I'd just like to point out that there's not really much of a point in kicking players with high ping. People tend to think that it will lag other players, but the rate that the lagging client sends and receives information isn't really related to the others on the server (unless, of course, you were on something like a token ring network).
A high ping would probably be anywhere from 5-10 seconds, I would imagine. I personally get an average of .032 seconds from wisconsin to wherever crashed lives (through chatters).
You could make such a system by making the client execute a verb and retrieve the difference in time between sending the request and receiving the reply, but even then it isn't very reliable since any part of the communication may be delayed due to CPU lag.

Wouldn't you be better off making your game send less packets in the first place?
In response to Android Data
Android Data wrote:
You could make such a system by making the client execute a verb and retrieve the difference in time between sending the request and receiving the reply, but even then it isn't very reliable since any part of the communication may be delayed due to CPU lag.


Actually, I don't even think that is possible. Since all procedures are server-side, there's no real way to actually determine when the client responds, since everything the client does is purely processed by the server.
In response to Volte
If it's not possible another way, you could always use a little javascript to cause the client to "call back". I guess it's not going to be very precise, but you could still compare player's pings I guess, and that kind of stuff.
In response to DivineTraveller
DivineTraveller wrote:
A high ping would probably be anywhere from 5-10 seconds, I would imagine. I personally get an average of .032 seconds from wisconsin to wherever crashed lives (through chatters).

Crashed's Chatters server is on my server. I have no idea what state it's located in though. But it is somewhere in the US.

Hunt around slicehost.com to find out the server locations.
In response to Volte
Volte wrote:
Actually, I don't even think that is possible. Since all procedures are server-side, there's no real way to actually determine when the client responds, since everything the client does is purely processed by the server.

client
var
lastPingSent
responseTime
verb
pong()
set name = ".pong"
responseTime = world.time - lastPingSent
//responseTime = amount of time (in ticks) that the client took to respond
proc
ping()
responseTime = null
var/time = world.time
lastPingSent = time
winset(src, null, "command=.pong")
sleep(300) //timeout
if(!responseTime && lastPingSent == time)
//request timed out; you could kill the client here or flag the client as "LINKDEAD".
//del src


The server would tell the client to execute the ".pong" verb but would first jot down the current time. Once the client has sent a response, it can then substract the world.time from the recorded time which would give the amount or time in ticks that the communication took place in.

Then if the amount of time is too large (>25 for example) you could class the ping as being "too high".
In response to Android Data
And then if your server had a network usage or CPU spike you'd end up kicking everyone. There's really no way to pull this off accurately with BYOND.
In response to Nadrew
Which, bear in mind, Android Data did say.