There is a simple code:
class Chat(Namespace): def on_manager_connect(self, message): global managers managers = {'id': message['userId'], 'name': User.query.get(message['userId']).email, 'sid': request.sid, 'room': message['userId']} print(str(message['userId']) + ' was connected') def on_manager_joined(self, message): join_room(managers['room']) print(str(managers['id']) + ' joined the room') emit('manager_status', {'msg': managers['name'] + ' has entered the room.', 'time': time.strftime("%H:%M")}, room=managers['room']) def on_manager_text(self, message): redis_store.publish('msg', message['msg']) emit('manager_message', {'msg': message['msg'], 'time': time.strftime("%H:%M"), 'name': managers['name']}, room=managers['room']) def on_manager_left(self, message): leave_room(managers['room']) emit('manager_status', {'msg': managers['name'] + 'has left the room.', 'name': managers['name']}, room=managers['room']) print(managers['name'] + ' has left the room.') Client part:
socket_chat.on('manager_status', function(data) { $('#chat-box').append('<div class="chat_message_wrapper">' + '<div class="chat_user_avatar">' + '<a href="#" target="_blank" >' + '<img class="md-user-image" style="border-radius: 999px" alt="" title="" src="https://kak2z.ru/galavatars/images/9/561.png">' + '<!--img alt="" title="" src="" class="md-user-image"-->' + '</a>' + '</div>' + '<ul class="chat_message last" id="chat-wrapper">' + '<li>' + '<p>' + data.msg + '</p>' + '<span class="chat_message_time">' + data.time + '</span>'+ '</li>' + '</ul>' + '</div>'); $('#chat').scrollTop($('#chat')[0].scrollHeight); }); socket_chat.on('manager_message', function(data) { $('#chat-box').append('<div class="chat_message_wrapper">' + '<div class="chat_user_avatar">' + '<a href="#" target="_blank" >' + '<img class="md-user-image" style="border-radius: 999px" alt="" title="" src="https://kak2z.ru/galavatars/images/9/561.png">' + '<!--img alt="" title="" src="" class="md-user-image"-->' + '</a>' + '</div>' + '<ul class="chat_message last" id="chat-wrapper">' + '<li>' + '<p>' + data.msg + '</p>' + '<span class="chat_message_time">' + data.time + '</span>'+ '</li>' + '</ul>' + '</div>'); }); The problem is that on_manager_connect works in 100 out of 100 cases (every time the page is reloaded, I get a message that prints print(str(message['userId']) + ' was connected') , while on_manager_joined works every 3-5 times (every 3-5 pages reload).
I do not understand what the problem is.
If someone came across and knows what this may be caused, I beg you to help.
[EDIT]
At the same time, I ALWAYS get a message:
[2017-02-05 17:24:53 +0300] [6409] [ERROR] Error handling request Traceback (most recent call last): File "/home/narnik/Программы/FlaskProjects/ttt/venv/lib/python3.5/site-packages/gunicorn/workers/async.py", line 52, in handle self.handle_request(listener_name, req, client, addr) File "/home/narnik/Программы/FlaskProjects/ttt/venv/lib/python3.5/site-packages/gunicorn/workers/async.py", line 114, in handle_request resp.close() File "/home/narnik/Программы/FlaskProjects/ttt/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 423, in close self.send_headers() File "/home/narnik/Программы/FlaskProjects/ttt/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 316, in send_headers tosend = self.default_headers() File "/home/narnik/Программы/FlaskProjects/ttt/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 297, in default_headers elif self.should_close(): File "/home/narnik/Программы/FlaskProjects/ttt/venv/lib/python3.5/site-packages/gunicorn/http/wsgi.py", line 230, in should_close if self.status_code < 200 or self.status_code in (204, 304): However, it says that this error does not interfere with the work of WebSockets.
I launch the application as follows:
sudo gunicorn manage:app --worker-class eventlet -w 1 --bind 0.0.0.0:5000 --reload