Comments (6)
…it would be better to shut it down when the notifications queue is empty and restart it when a new notification needs to be sent.
Actually, Apple's docs suggest keeping the connection open even when you're not using it:
Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day.
You're right, though, that there isn't currently a way to know when all notifications have been sent. Generally, our expectation has been that the connection will be open for a long time and shutdown timing won't be a high-precision affair (i.e. you'll be doing it as part of a larger application shutdown). The README is a bit confusing in that regard, though; you're right that it makes it sound like we're encouraging you to shut down the PushManager
whenever the queue is empty, and I'll fix that shortly.
Could you tell us a bit more about your use case? Is this a thing where we're just setting expectations poorly in the README, or do you have some functional need that's not being met by the design of the library itself?
from pushy.
I guess I was just confused by the README, what you say about keeping the connection open makes perfect sense.
Anyway, IMHO having some methods to query the state of the pushManager
and the notifications queue may come in handy, I'll try forking and implementing them later on.
from pushy.
Anyway, IMHO having some methods to query the state of the pushManager and the notifications queue may come in handy, I'll try forking and implementing them later on.
Fair enough. I'll also take a whack at it. It's a little tricky since we're doing asynchronous network IO, though; to check on "done"-ness, we'd need to wait for all network writes to finish, and then make sure we don't have a reply from the APNs gateway. Should be doable, but I suspect it will be non-trivial.
I'll certainly update the README, too. Cheers!
from pushy.
Made the README/site changes in 80ed150 and 00e27c6.
I've been thinking a lot about how to reflect queue state. We can't know even when a message has been sent by the underlying transport, so our options are pretty limited (just checking whether the queue is empty doesn't tell us much because sent messages might get re-enqueued after an exception).
The only way we could really get affirmative confirmation that messages have been sent (and thus have a meaningful sense of queue state) would be to send a deliberately bogus message to the APNs gateway; when the gateway rejects the known-bad message, we'll know that everything prior to that message was handled successfully. I'll explore that in more detail and see if it passes the crazy test.
from pushy.
The only way we could really get affirmative confirmation that messages have been sent (and thus have a meaningful sense of queue state) would be to send a deliberately bogus message to the APNs gateway; when the gateway rejects the known-bad message, we'll know that everything prior to that message was handled successfully.
I've opened #4 to shut down with a known-bad notification.
from pushy.
We've merged #4, which I think closes the book on fuzzy shutdown timing.
from pushy.
Related Issues (20)
- Intermittent layer 7 firewall blocks due to missing SNI HOT 2
- Requesting to release a new tag for Live activity support HOT 2
- Failed to create channel java.io.IOException: Connection reset by peer HOT 6
- upgrade the netty-transport from 4.0.37 to 4.1.37 HOT 2
- pushy0.15.0 Stream closed before a reply was received HOT 1
- Connection reset by peer. HOT 3
- ipv6 problem HOT 2
- java.util.concurrent.ExecutionException: io.netty.handler.codec.http2.Http2Exception: Error decoding headers: io/netty/handler/codec/http/HttpHeaderValidationUtil HOT 1
- pushy0.15.2 Stream closed before a reply was received And GOAWAYException HOT 2
- Is the proxy way to replace this? Then a mistake was made
- javax.net.ssl.SSLHandshakeException: Server chose TLSv1, but that protocol version is not enabled or not supported by the client. HOT 5
- Stream closed before write could take place HOT 4
- push 0.15.1 io.netty.handler.codec.http2.StreamBufferingEncoder$Http2GoAwayException in a lot of requests HOT 2
- Support for "apns-unique-id" HOT 1
- return success when send notifacation after uninstalling app HOT 1
- I use Pushy to push the message,then I get "success=true",but the phone not responding HOT 2
- couple of Live Activity issues: stale-date is missing, and relevance-score can now have a value greater than 1.0 HOT 2
- Native SSL provider is available; will use native provider. HOT 4
- ApnsChannelPool java.io.IOException "Failed to create channel - Connection reset by peer" HOT 2
- Network is unreachable: `api.push.apple.com/2620:149:208:4308:0:0:0:a:443` HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pushy.