MantisBT - Zandronum | ||||||||||
| View Issue Details | ||||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | |||||
| 0001542 | Zandronum | [All Projects] Suggestion | public | 2013-10-15 02:28 | 2014-06-15 14:34 | |||||
| Reporter | AlexMax | |||||||||
| Assigned To | ||||||||||
| Priority | normal | Severity | minor | Reproducibility | N/A | |||||
| Status | acknowledged | Resolution | open | |||||||
| Platform | OS | OS Version | ||||||||
| Product Version | 1.2 | |||||||||
| Target Version | Fixed in Version | |||||||||
| Summary | 0001542: Master/Server Query Protocol improvements. | |||||||||
| Description | The master server protocol seems to make a pretty fundamental assumption about the ordering of packets that I believe does not exactly hold. When getting the initial list of servers, it appears that you get a packet number with each piece of the master list, along with a signal of if this is the 'last' packet or if there are more servers to deliver. This setup makes it more difficult than it needs to be to ensure that you have all the necessary packets for a complete view of servers. UDP has neither guaranteed delivery or guaranteed sequence, and with the current setup you have to do a little bit of inferring to determine if you have a complete view of the server list, which becomes much more difficult if the last master response packet gets dropped (because then you can't know how many pieces you're missing). Thus, I would like to suggest an alternative. I think that it would be a wise idea for each one of the master response packets to have three items in the header: - Truncated timestamp that the packet assembly _started_ at. - Current packet - Total number of packets. The truncated timestamp would behave as a unique identifier for a group of responses, and being told how many packets to expect ahead of time makes it trivial to figure out how much of the server list you actually got and how many packets got through or were lost. You could potentially also extend this system to server query response packets, since the current system seems to rely on you only requesting specific subsets of data. There are two other random changes that I think might be worthwhile. First is that I believe that we can save a few bytes by changing the master response 'packet type flag' to a byte instead of a long. There aren't enough possible responses to warrant it being a long. Second is to abandon huffman coding and go with a fast compression scheme such as lz4. Initial tests of mine reveal it cutting bandwidth usage in half, though I need to run some real tests. | |||||||||
| Steps To Reproduce | ||||||||||
| Additional Information | ||||||||||
| Tags | No tags attached. | |||||||||
| Relationships |
| |||||||||
| Attached Files | ||||||||||
| Issue History | ||||||||||
| Date Modified | Username | Field | Change | |||||||
| 2013-10-15 02:28 | AlexMax | New Issue | ||||||||
| 2013-10-15 12:59 | Blzut3 | Note Added: 0007415 | ||||||||
| 2013-10-15 16:27 | AlexMax | Note Added: 0007416 | ||||||||
| 2013-10-15 16:30 | Blzut3 | Relationship added | related to 0000892 | |||||||
| 2014-06-15 14:34 | Watermelon | Status | new => acknowledged | |||||||
| Notes | |||||
|
|
|||||
|
|
||||
|
|
|||||
|
|
||||