The server should send a new information to the clients only if there was a change in behaviour in one of those clients (input from a player) - and then only send the information about the change.
So to extend your example (this might include lot of stuff that is obvious to you, but just for the clarity...):
Player connects to the server:
- Server looks up all the information about the player that is needed for the clients to display him properly: at minimum this would be the position. Depending on the game we're making this would also include things like rotation, state, character appearance etc. (though for example the appearance can generally be loaded later and a placeholder can be displayed instead). This information is then send to every client (including the player). And we are not going to send this big bulk of information together again.
- Clients create this new player based on the information they received and the player now also knows what his position is so now we can render the world around him. The player would also need information about other players that are nearby - this also could have been sent to him in the previous step.
At this point every client should see everyone that is nearby.
Player wants to move forward:
This is very game dependant (is the movement "click to move", WASD, something else?) but let's consider the option where while the W keys is pressed, the player is moving forward. Two things should happen when the player presses the key. First, this information and nothing more is sent to the server. So the server receives a message that "John", whatever he's doing right now, wants to move forward.
Meanwhile on the player's client the second thing happens as we can start performing the forward movement no matter what's going on on the server (look up movement prediction for more information).
After receiving the information, the server checks if the movement is possible and if it is, sends the movement data to the clients. The clients should already have this player's position and rotation, so we don't need to send it again (although you might want to do that for synchronization purposes, but that can be performed at a different time).
The player shouldn't send anything concerning the movement after that. The server and the clients should all now perform the forward movement calculation inside their own update methods, until the player stops pressing the W key. Then we send a new message like before containing only player ID and that we doesn't want to move anymore.
We can apply a similar approach to rotation, shooting, state or changing appearance. When the player presses the "shoot" button, the server gets notified, and can just resend the information to the others, or can attach direction vector as well to ensure more synchronized behaviour.