Code Monkey home page Code Monkey logo

Comments (3)

fdimuccio avatar fdimuccio commented on May 9, 2024

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.

fdimuccio avatar fdimuccio commented on May 9, 2024

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.

fdimuccio avatar fdimuccio commented on May 9, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.