Comments (3)
Yes, as stated in the link that you posted the only way to detect a broken TCP connection is trying to send some bytes. In SockJSSettings there is an option with which you can tune the heartbeat interval, it serves the purpose but there is an issue.
I tested it on Play 2.5 but it doesn't work, Play just keep sending data without detecting that the other end went away, I reproduced it by writing this simple action that returns a chunked response:
def test = Action {
val source =
Source.tick(200.millis, 200.millis, "tick")
.map(s => {println(System.currentTimeMillis()); s})
.watchTermination() { (_, r) =>
r.onComplete(println)
}
Ok.chunked(source)
}
If you run it and disconnect the cable the source will never ends. Since play2-sockjs relies on the underlying Play implementation there is not much that I can do. I smell a bug here, but before reporting it I want to do further investigation.
from play2-sockjs.
By the way it could be fixed by implementing a ping/pong style heartbeat, but unluckily SockJS protocol does not support it natively, so you need to implement it at higher level.
from play2-sockjs.
I tested it further and it does detect disconnect, but it does after enough data has been transferred, so I guess there is some internal buffer and timeout that control this.
As I said before one simple way to implement it reliably is by sending an ping message and waiting for the pong, if the response doesn't come in time then you detected an unreliable connection.
I'll keep the issue open for further investigations.
from play2-sockjs.
Related Issues (20)
- API reference for 0.5.x is missing HOT 1
- Rejecting & accepting websockets HOT 1
- Websocket message losses HOT 6
- Heartbeat frames shouldn't be taken in consideration when calculating framebuffer size
- Get IP address HOT 5
- API reference for 0.6.x is missing HOT 5
- Compatibility with Akka Cluster HOT 2
- WebSocket actor crashes for large payloads
- Play 2.7 released HOT 4
- Play 2.7.3 support HOT 3
- Compatibility Scala 2.13 HOT 1
- Play 2.8.0 support HOT 2
- OutOfMemoryError HOT 2
- Error in stage [play.sockjs.core.streams.CancellationSuppresser@37e0822a]: Cannot push port (SubSourceOutlet(CancellationSuppresserSubSource)) twice, or before it being pulled HOT 1
- play2-sockjs v0.8.1 compatibility HOT 1
- WebSocket Re-connection
- Header Access‐Control‐Allow‐Origin: *
- Detecting close status code
- Sockjs 0.9.x - Play2.9 Scala3 support HOT 1
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 play2-sockjs.