-
Notifications
You must be signed in to change notification settings - Fork 208
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
feat: PRT - Websocket limited per ip #1738
base: main
Are you sure you want to change the base?
Conversation
I wouldn't use the IP alone as the unique identifier to map the open sockets (what happens when users behind NAT are sending requests?). |
agreed and i would take it a step further, allow a special header to change the rate, and we force set this header on our nginx, because otherwise you have to manage special rate limits within the consumer |
…onnection request from ngnix without limiting everyone the same.
I've added a header to rate limit. functionality is quite the same as the flag just here we can control it from ngnix instead of directly in process Header name: Example use: |
@@ -156,7 +164,8 @@ func (cwm *ConsumerWebsocketManager) ListenToMessages() { | |||
return | |||
case <-ticker.C: | |||
// check if rate limit reached, and ban is required | |||
if WebSocketBanDuration > 0 && requestsPerSecond.Load() > uint64(WebSocketRateLimit) { | |||
currentRequestsPerSecondLoad := requestsPerSecond.Load() | |||
if WebSocketBanDuration > 0 && (cwm.headerRateLimit > currentRequestsPerSecondLoad || currentRequestsPerSecondLoad > uint64(WebSocketRateLimit)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if currentRequestsPerSecondLoad is very low and the header is given the user is banned, i don't get it
} | ||
ip := websocketConn.RemoteAddr().String() | ||
key := wcl.getKey(ip, ipForwarded) | ||
numberOfActiveConnections := wcl.addIpConnectionAndGetCurrentAmount(key) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you add then immediately decrease, and not when the connection is down, no other writes to the active connections, this will always be true
ipForwarded = "" | ||
} | ||
ip := websocketConn.RemoteAddr().String() | ||
key := wcl.getKey(ip, ipForwarded) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we said we will do this based on dappId, ip and user agent
Description
Closes: #XXXX
Author Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.
I have...
!
in the type prefix if API or client breaking changemain
branchReviewers Checklist
All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.
I have...