Random extra implemetation info.
When viewing the canvas you send the left right top bottom of your screen and zoom to the server. The server then sends back all cursors that are valid to be shown based on what you sent. On future times you ask the server it only sends back what changed (so a cursor that doesnt move doesnt get sent again and your local version knows its just still in its same position). That helps cut down more on bandwidth being sent around.
The map is split into various chunks of different sizes. When you send the position and zoom to the server it tries to fit you nicely into chunks and then the cursors it sends back are the cursors within those chunks. Then if somebody else asks for the cursors and they fit into the same chunks it sends back the same data to them due to it being cached for those chunks instead of computing it again which helps reduce server load.





















































































































If things go bad theres a killswitch so that the entire feature can be disabled but have my fingers crossed everything works the first time. Did some testing but havent been able to simulate 300 actual users moving around