Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Map Streaming #3

Open
dylan opened this issue Nov 29, 2013 · 3 comments
Open

Map Streaming #3

dylan opened this issue Nov 29, 2013 · 3 comments

Comments

@dylan
Copy link
Contributor

dylan commented Nov 29, 2013

When a client connects it'd be nice if the server could sent relevant map data based on the position of the client.

Example:

  • The server sends the tiles the client needs to draw the screen/render it's view radius.
  • The server sends differences in local tile info when a change occurs to a map.
  • The server sends new relevant tiles to the client as the client moves, and the client drops irrelevant tiles.

This would allow for very large maps that can be generated/chunked/streamed to clients.

@cha55son
Copy link
Member

I would be interested in this as well. The closest I could find from google for this type of problem client-side would be

http://impactjs.com/forums/help/giant-seamless-map-split-into-levels/page/1

Assuming I could get that working properly (seamlessly or with a short loading screen) then it shouldn't be difficult for the server to notify clients to load new maps as they reach the border of the current map.

The problem I foresee with this setup is the server will need to manage all entities across the entire world which will most likely be to much. For example I am working on a tanks game and it can only handle up to 10 players before there is noticeable lag. (EC2 small server) I am currently working on reducing network traffic where necessary so that should help a bit.

I believe the end result would be to spin up a server for each sub-section of the world. So as a user transitions from one sub-section to another they would really be changing servers. Although if one sub-section of the map is a high traffic area then it could potentially overwhelm the server. Unless, high traffic sub-sections are ran on more powerful servers.

@dylan
Copy link
Contributor Author

dylan commented Nov 30, 2013

I have several papers on this very problem, I'll gather a few of the simplest and post them. Specifically we'd need area of interest filtering with a pub sub mechanism for clients so they only receive data for entities local to them and drop them when they shouldn't care, a custom background map/collision renderer that loads/dumps relevant tiles on the fly, as well as some dead reckoning/easing for when we miss update frames.

On Nov 30, 2013, at 8:09 AM, Chason Choate [email protected] wrote:

I would be interested in this as well. The closest I could find from google for this type of problem client-side would be

http://impactjs.com/forums/help/giant-seamless-map-split-into-levels/page/1

Assuming I could get that working properly (seamlessly or with a short loading screen) then it shouldn't be difficult for the server to notify clients to load new maps as they reach the border of the current map.

The problem I foresee with this setup is the server will need to manage all entities across the entire world which will most likely be to much. For example I am working on a tanks game and it can only handle up to 10 players before there is noticeable lag. I am currently working on reducing network traffic where necessary so that should help a bit.

I believe the end result would be to spin up a server for each sub-section of the world. So as a user transitions from one sub-section to another they would really be changing servers. Although if one sub-section of the map is a high traffic area then it could potentially overwhelm the server. Unless, high traffic sub-sections are ran on more powerful servers.


Reply to this email directly or view it on GitHub.

@dylan
Copy link
Contributor Author

dylan commented Nov 30, 2013

I'll post any map streaming related notes here, i'll post area of interest filtering stuff in the other issue...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants