Without breaking into a networking essay...

The main way to reduce lag, and processing, is to send less messages.
i.e: It's not a good idea to be sending messages every 30 milliseconds, this will bog the server down quite a bit, epsecially with lots of players.

A better way would be to just send a single message to the server whenever someone presses a button. Then the server sends that message to every other player, and each computer (or just the server) processes that message.

e.g:
Player A presses and holds the UP button, a single message is sent to the server.
The server relays that message to all other clients.
Each client flags Player A as walking UP, and each tick moves Player A up on their screen.

Player A releases the UP button, a single message is sent to the server
etc, etc.


Another way, mainly to stop hacking, is to have the server process the message aswell and keeps it's own game state. (From the sound of things, you are already doing this). And every 1 seconds or so, the server sends true positions to all clients, syncronizing.

Hope that helps.