I think your relating the client game loop too closely to the server one.
lets try a different approach to explain what i would recommend.
The game client is responsible for drawing and interacting with the user.
the game server is responsible for managing game assets that need to be kept in sync across game clients.
When we talk about the server's game loop.. loop may not be the best term.
I personally use a scheduled thread that runs every 0.x seconds (.3 for my current game)
Example from my current game:
The server starts..
A scheduled thread is created that runs every .3 seconds.
When this thread executes it will :
-run a routine to update any calculated modifications to the models its managing.
outside this loop the server provides the following operations that can be invoked by clients
getCoordsList(); - return a list of game coords for the assets being managed by the server
getModelData(id) - as my game is 3d if a model is in the coords list but the client doesnt have a local copy of this model it can ask for the data needed to make it.
addModelData(ModelData) - the client add a new model to the server to manage from this point forward. Other clients will find out about via the combination of the two other methods. (getCoordsList and getModelData)
Note: Nothing on the server is ever related to FPS.
The server threading is based on real world time.
So if your client is slow.. and another is fast.. the objects managed by the server dont react differently.
hope this helps