The request is simple. The server can set a PING LIMIT in their settings, and BEFORE a client starts downloading / connecting, it ping's the server. if the client's ping is higher than the PING LIMIT the server will send a packet telling it PING TOO HIGH, and close the connection.
This lets servers automatically refuse players who would lag the game for everyone.
Auto-deny joining players by maximum ping
Moderator: ickputzdirwech
Auto-deny joining players by maximum ping
Last edited by MCorgano on Tue Mar 08, 2016 7:42 am, edited 1 time in total.
Re: [Feature Request] auto-deny players by ping
addind to this, you would also need to ensure the round trips to all other peers have sane pings... but how do you do this without first connecting? =/
still, detecting "bad" ping on that first connection would hopefully weed out some of them.
still, detecting "bad" ping on that first connection would hopefully weed out some of them.
Hosting a factorio server? Take a look at this || init script ||.
Re: [Feature Request] auto-deny players by ping
It's important to actually do more than 1 packet's worth of testing, preferably at least 50. It's easy for a single packet to mysteriously take half a second to get to where it wants to go, and it wouldn't be representative.
Re: [Feature Request] auto-deny players by ping
How about this
client sends server a "I want to connect packet"
Server pings client 10 times, 100ms apart, to test
IF BAD: send client a "you're ping is bad" packet
IF GOOD: continue
Server sends client list of other clients to ping
Client pings other clients 10 times, 100ms apart, to test
OTHER CLIENTS report the ping information to the server
IF BAD: server sends client "your ping is bad" and closes
If GOOD: server pauses game and sends client map
This would prevent the new client from lying that it has a good ping to the other clients, but would be more complex
upshot is if this succeeds then the new client is almost guaranteed not to slow down the server
I also ran into another issue: A slow client can freeze the server for a LONG time. RIGHT NOW, i could DDOS a server by connecting to it with a VERY slow connection intentionally, so the server stops for a long time to send me the map, therefore halting the server.
client sends server a "I want to connect packet"
Server pings client 10 times, 100ms apart, to test
IF BAD: send client a "you're ping is bad" packet
IF GOOD: continue
Server sends client list of other clients to ping
Client pings other clients 10 times, 100ms apart, to test
OTHER CLIENTS report the ping information to the server
IF BAD: server sends client "your ping is bad" and closes
If GOOD: server pauses game and sends client map
This would prevent the new client from lying that it has a good ping to the other clients, but would be more complex
upshot is if this succeeds then the new client is almost guaranteed not to slow down the server
I also ran into another issue: A slow client can freeze the server for a LONG time. RIGHT NOW, i could DDOS a server by connecting to it with a VERY slow connection intentionally, so the server stops for a long time to send me the map, therefore halting the server.
Auto-deny joining players that take too long to download map
Merged with the other suggestion, I'd rather have discussing Auto-deny features as a whole and not in separate threads, as they are very similar and overlap in parts.
-- daniel34
Title says all really. Problem is the ENTIRE SERVER stops when a player is joining. This means if a player comes on with 15k DIALUP you need to wait ten minutes before we can tell them their connection is too slow to play on this server. The request is to add a configurable timeout to drop the joining player.
This is damn easy to abuse. Throttle your connection to be really slow, and connect to a server you don't like. Bam - instant DOS attack, built into the game.
Fixing it could be as simple as waiting for mapsize * somenumber seconds, and if the player joining still doesn't have the map downloaded then drop them (Or give us the option to auto-bad so they won't keep trying to join). Each server could choose their "somenumber" to be more or less lenient.
-- daniel34
Title says all really. Problem is the ENTIRE SERVER stops when a player is joining. This means if a player comes on with 15k DIALUP you need to wait ten minutes before we can tell them their connection is too slow to play on this server. The request is to add a configurable timeout to drop the joining player.
This is damn easy to abuse. Throttle your connection to be really slow, and connect to a server you don't like. Bam - instant DOS attack, built into the game.
Fixing it could be as simple as waiting for mapsize * somenumber seconds, and if the player joining still doesn't have the map downloaded then drop them (Or give us the option to auto-bad so they won't keep trying to join). Each server could choose their "somenumber" to be more or less lenient.
Re: Auto-deny joining players by maximum ping
Welp. I didn't know if they were similar enough to be included together or not. They deal with two different but related things - high latency and slow download.
Had the server I play locked out for 25 mins because someone with a crappy connection tried to join, disconnected, and tried to join AGAIN.
Had the server I play locked out for 25 mins because someone with a crappy connection tried to join, disconnected, and tried to join AGAIN.
Re: Auto-deny joining players by maximum ping
the topics are similar enough even tho they handled two separate use cases they still boil down to one thing: Ensuring playability and keeping the badies out
some form of solution/tool is highly sought after to battle slow dsl and far away clients in a public setting (I for one tried to block ips by country but would rather be more open and simply weed out the occasional bad apple)
some form of solution/tool is highly sought after to battle slow dsl and far away clients in a public setting (I for one tried to block ips by country but would rather be more open and simply weed out the occasional bad apple)
Hosting a factorio server? Take a look at this || init script ||.
- bobingabout
- Smart Inserter
- Posts: 7352
- Joined: Fri May 09, 2014 1:01 pm
- Contact:
Re: Auto-deny joining players by maximum ping
I'm probably against the idea for one simple reason. The person I would most likely want to play a game of factorio with lives on the complete opposite side of the planet (UK and Australia). We play games together quite often, and we expect and allow for latency based lag. It is insanely annoying when a game tells us we can't play with each other because our ping is too high. we get like 350ms ping on a good day.
Last time we tried to play multiplayer was back in it's early days, we gave up when we were getting basically 1 tick every 3 seconds. They've added a lot of latency hiding stuff since then, so we'll see what it's like next time.
Last time we tried to play multiplayer was back in it's early days, we gave up when we were getting basically 1 tick every 3 seconds. They've added a lot of latency hiding stuff since then, so we'll see what it's like next time.
Re: Auto-deny joining players by maximum ping
As bobingabout said, if something like this were implemented it should not be enabled by default.
I might use it on my servers to keep people with high latency / slow speed out, but if I wanted to play a multiplayer game with a friend I wouldn't want to be disconnected from the game just because Factorio thinks the connection is too slow/unreliable.
I might use it on my servers to keep people with high latency / slow speed out, but if I wanted to play a multiplayer game with a friend I wouldn't want to be disconnected from the game just because Factorio thinks the connection is too slow/unreliable.
Re: Auto-deny joining players by maximum ping
a configurable threshold and or disable/enabling of this feature would be required, I agree with the two previous speakers...
Hosting a factorio server? Take a look at this || init script ||.