Coder Social home page Coder Social logo

Comments (3)

scop avatar scop commented on July 17, 2024

I think a full fix for this isn't solely about examining what was received in one read from the server, but rather what the receive buffer holds. The buffer might have partial frames in it, and if it does, then no matter what is received from the server, it should not be treated as a heartbeat until the partial frame is complete.

I've filed PR #120 which I believe fixes this, and while at it, adds support for CRLF heartbeats (allowed in STOMP 1.2). The test case code in it is quite ugly but should do its job at least for now. I haven't tested this beyond running the test suite, so approach with care. Look at the last commit of the PR for the actual fix for this, the others are less interesting, supporting ones with lots of noise caused by indentation level changes.

from stomp.py.

scop avatar scop commented on July 17, 2024

Updated, more tested version of the fix is now in #120. The flaw with the previous one was that it treated optional EOLs following the NUL at end of frame as heartbeats. This one doesn't, is quite similar to macboy012's fix, but this one additionally avoids misdetections in the (unlikely) case that the "outer" receive buffer contains data when a heartbeat arrives. This one also removes the CRLF change, maybe to be handled later some time.

from stomp.py.

agalera avatar agalera commented on July 17, 2024

stomp.py 4.1.11

WARNING:stomp.py:Heartbeat timeout: diff_receive=7.020703365000372, time=23181.822471108, lastrec=23174.801767743
WARNING:stomp.py:Unable to issue SHUT_RDWR on socket because of error '[Errno 9] Bad file descriptor'
17
DEBUG:stomp.py:Sending a heartbeat message at 23182.823864987
DEBUG:stomp.py:Sending frame ['\n']
ERROR:stomp.py:Error sending frame
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/stomp/transport.py", line 565, in send
    self.socket.sendall(encoded_frame)
OSError: [Errno 9] Bad file descriptor
DEBUG:stomp.py:Unable to send heartbeat, due to: [Errno 9] Bad file descriptor

I get this error when active trace heartbeat (5000, 5000) and launched a task

not recover the error again and that message appears in infinite loop

import time
import stomp
import logging


logging.basicConfig(level=10)


class MyListener(stomp.ConnectionListener):
    def on_error(self, headers, message):
        print('received an error "%s"' % message)

    def on_message(self, headers, message):
        print('received a message "%s"' % message)
        for x in range(50):
            print(x)
            time.sleep(1)
        print('finish')


conn = stomp.Connection(heartbeats=(4000, 4000))
conn.set_listener('', MyListener())
conn.start()
conn.connect('guest', 'guest', wait=True)
conn.subscribe(destination='/queue/rocket1', id=1, ack='auto')
conn.send('/queue/rocket1', 'OOooOoOoOhhh')

#while conn.is_connected():
time.sleep(60)
conn.disconnect()

from stomp.py.

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.