Closed
Conversation
dfdd296 to
0a8b7a3
Compare
1bd617e to
0028b06
Compare
237887d to
5d67c13
Compare
07c65a7 to
1befbfc
Compare
98e21fc to
9c63f44
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Some infrastructure providers provide scale-to-zero support: the provider will automatically start your service just-in-time when a request arrives at a minor latency hit, and will stop your application if there are no in-flight connections. This helps save money, because you aren't billed for the time in which your application is idle.
This works best when the application cooperates, voluntarily exiting after a period of inactivity (especially for a proxy like
sing-boxwhich has long-lived persistent connections). This PR implements this cooperation for sing-box: it watches for traffic and keeps a last-activity timestamp. Every 10 seconds, it checks if there has been any activity in a configured timeout. If not, it callsos.Exit(0).I've tested this out on my scale-to-zero platform of choice and it seems to work well! I'm seeing a substantial reduction in costs without much degradation in user experience using a timeout of
1m. Of course,sing-boxbehaves exactly as it previously did when this option is not enabled.