Comments (3)
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.
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.
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)
- Listener/transport modules too verbose when using heartbeat
- in adapter.ws.py, logging module should be imported from stomp HOT 1
- Release cadence HOT 3
- Get response for send() in stomp.py to retry in case of failure
- SSL PROTOCOL_TLS Deprecated HOT 1
- [Help] How can I use stomp.py to subscribe and set a receiving listener to endpoint properly? HOT 2
- Possible to only process a message received for a certain correlation id (or other property) HOT 1
- An error occurred when running the stompy example HOT 1
- Configure the redelivery for a message
- 8.1.0 tag missing on GitHub HOT 2
- Subscription Wildcards Support? HOT 2
- WSConnection does not handle binary messages HOT 2
- host header - STOMP 1.1 support and CLI argument
- TypeError during WebSocket shutdown HOT 3
- [Possible Bug] stomp.Connection() timeout option not working as expected! HOT 1
- Support context paths? HOT 2
- ssl library not found
- New release HOT 1
- Is 8.1.1 a legitimate release? HOT 7
- BrokenPipe error during long in on_message operation 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 stomp.py.