Dear Walter,
here is a modified version of the Tornado plugin.
Can you please try it?
In this case, similar errors ('WebSocket Protocol Error' and 'Masked frame from server') not occur?
Best regards,
Luboš
Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details
If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.
If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.
How To keep and recover websocket connections
- Pako
- Plugin Developer
- Posts: 2294
- Joined: Sat Nov 11, 2006 1:31 pm
- Location: Czech Republic
- Contact:
Re: How To keep and recover websocket connections
- Attachments
-
- __init__.py
- Tornado plugin, version 0.6
- (125.75 KiB) Downloaded 163 times
-
krambriw
- Plugin Developer
- Posts: 2570
- Joined: Sat Jun 30, 2007 2:51 pm
- Location: Stockholm, Sweden
- Contact:
Re: How To keep and recover websocket connections
Dear Pako, thank you
I will put in test very soon and both will run over night. So far the Webserver test is working fine.
I did not add any decoding/printout in the Tornado plugin for this, I did not know how to catch it
Best regards, Walter
I will put in test very soon and both will run over night. So far the Webserver test is working fine.
Correct, I have only seen this with the Tornado plugin (in javascript console):In this case, similar errors ('WebSocket Protocol Error' and 'Masked frame from server') not occur?
Code: Select all
From javascript console: Invalid frame header
From javascript console: One or more reserved bits are on: reserved1 = 0, reserved2 = 1, reserved3 = 0
Best regards, Walter
My released plugins
https://drive.google.com/drive/folders/ ... y01eVBKeHM
https://drive.google.com/drive/folders/ ... y01eVBKeHM
-
krambriw
- Plugin Developer
- Posts: 2570
- Joined: Sat Jun 30, 2007 2:51 pm
- Location: Stockholm, Sweden
- Contact:
Re: How To keep and recover websocket connections
Dear Pako,
The test has worked fine during the night, I just would like to do some more tests during the day
Best regards, Walter
The test has worked fine during the night, I just would like to do some more tests during the day
Best regards, Walter
My released plugins
https://drive.google.com/drive/folders/ ... y01eVBKeHM
https://drive.google.com/drive/folders/ ... y01eVBKeHM
-
krambriw
- Plugin Developer
- Posts: 2570
- Joined: Sat Jun 30, 2007 2:51 pm
- Location: Stockholm, Sweden
- Contact:
Re: How To keep and recover websocket connections
Dear Pako,
During the day I have now performed what we maybe can call a "small stress test". I did connect several websocket clients to the websocket server (I think something like
- 5 clients i the same PC using Firefox
- 1 client using Chrome
- 2 tablets, android, each using Firefox
Result with Webserver:
1) Whatever I try, I get a lot of disconnects all the time when I start to use a more javascript heavy page. My browsers did reconnect but after not very long, disconnections came again and it started all over again and again
2) I have a feeling that a simpler html page will 'survive' longer, i.e the connection will live longer than if you have rather complex javascript code in the page (like I have)
3) I also had two crashes in the Webserver plugin and I just roughly changed the code in two places to be able to continue
At line 3764
Reason for the change was that I received an exception when deletion was tried on a client that was already deleted
At line 3764
Reason for the change was that it can happen that the client connection is already gone and if so the write_message will raise an exception
4) In my environment, with the web page I need, I could not find any solution to make it work without causing so many disconnects. I have no further ideas what could be improved/modified.
Result with Tornado:
1) The number of disconnects are very rare even if they do also happens
2) No further changes needed as I see it, the Tornado plugin is working fine
3) I have to use Tornado in my environment due to the fewer disconnects it creates
My best regards,
Walter
During the day I have now performed what we maybe can call a "small stress test". I did connect several websocket clients to the websocket server (I think something like
- 5 clients i the same PC using Firefox
- 1 client using Chrome
- 2 tablets, android, each using Firefox
Result with Webserver:
1) Whatever I try, I get a lot of disconnects all the time when I start to use a more javascript heavy page. My browsers did reconnect but after not very long, disconnections came again and it started all over again and again
2) I have a feeling that a simpler html page will 'survive' longer, i.e the connection will live longer than if you have rather complex javascript code in the page (like I have)
3) I also had two crashes in the Webserver plugin and I just roughly changed the code in two places to be able to continue
At line 3764
Reason for the change was that I received an exception when deletion was tried on a client that was already deleted
Code: Select all
def BroadcastMessage(self, message):
tmp = list(self.wsClients.iteritems())
for key, client in tmp:
try:
client.write_message(message)
except Exception, exc:
if exc.args[0] in (10053, 10054, 10060):
try:
del self.wsClients[client]
del self.wsClientsTime[client]
eg.PrintNotice(self.text.forcDel % repr(client))
self.TriggerEvent(
self.text.wsClientDisconn,
payload = [client]
)
except:
pass
else:
eg.PrintTraceback() # debugging ...
Reason for the change was that it can happen that the client connection is already gone and if so the write_message will raise an exception
Code: Select all
def write_message(self, message):
try:
self.request.send(chr(129))
length = len(message)
if length <= 125:
self.request.send(chr(length))
elif length >= 126 and length <= 65535:
self.request.send(chr(126))
self.request.send(pack(">H", length))
else:
self.request.send(chr(127))
self.request.send(pack(">Q", length))
self.request.send(message)
except:
pass
Result with Tornado:
1) The number of disconnects are very rare even if they do also happens
2) No further changes needed as I see it, the Tornado plugin is working fine
3) I have to use Tornado in my environment due to the fewer disconnects it creates
My best regards,
Walter
My released plugins
https://drive.google.com/drive/folders/ ... y01eVBKeHM
https://drive.google.com/drive/folders/ ... y01eVBKeHM
- Pako
- Plugin Developer
- Posts: 2294
- Joined: Sat Nov 11, 2006 1:31 pm
- Location: Czech Republic
- Contact:
Re: How To keep and recover websocket connections
Dear Walter!
Thank you for the tests and their detailed evaluation.
Described problems are probably not caused by new arrangements,
so nothing prevents use this version to the new EventGhost release.
Of course, I think including your recent changes.
Maybe someday we'll find the cause of this behavior and it will be possible to do better.
Best regards,
Luboš
Thank you for the tests and their detailed evaluation.
Described problems are probably not caused by new arrangements,
so nothing prevents use this version to the new EventGhost release.
Of course, I think including your recent changes.
Maybe someday we'll find the cause of this behavior and it will be possible to do better.
Best regards,
Luboš