Timing of movement

Can anyone give me some advice on technical design around accepting and processing player input? I am using Unity for the client side.

Atm I am just sending a message to the server every frame as long as a key is held down and I am just adding a value to x/y when the command arrives. Would it be better to have a short timeout between sending such messages?

private void Update()
{
	if (Input.GetKey(KeyCode.LeftArrow))
	{
		client.Send(Msg_MoveLeft);
	}

...

movePlayer(client: Client, action: string)
{
    if (action === "L") 
    {
        this.players[client.sessionId].x -= 0.1;
    } 

How would one deal with movement speed server side? I was thinking I should collect the player's wanted actions like, move left, right, etc; and then in the "update" function, which is a setSimulationInterval callback, I would do the actual movement so that it is locked to some time interval (movement speed).

Hi @plyoung,

I think a better approach would be to send when the key is active. Activating the "left" command when the key is first pressed, and de-activating it when it's released. This would avoid sending too many messages per frame.

Ah yes, that would be much better. Thanks.

My first time trying to create a "real time" multiplayer game. I've only done turn-based, in multiplayer games, before so I'm not quite sure about all the correct ways to approach this.