Python sid和名称空间的问题

Python sid和名称空间的问题,python,sockets,flask,flask-socketio,Python,Sockets,Flask,Flask Socketio,索克提奥给我带来了一些麻烦。我正在尝试使用以下代码初始化私人聊天室: @socketio.on('join', namespace='/join') def on_join(receiver_name): username = session['username'] join_room(receiver_name) # start a chat room with the receiver's username send(username + ' is now conn

索克提奥给我带来了一些麻烦。我正在尝试使用以下代码初始化私人聊天室:

@socketio.on('join', namespace='/join')
def on_join(receiver_name):
    username = session['username']
    join_room(receiver_name)  # start a chat room with the receiver's username
    send(username + ' is now connected.', room=receiver_name)
不幸的是,我遇到了一些错误,例如
AttributeError:“Request”对象没有属性“sid”
。即使我特别指定了
request.sid
,我也会得到一个错误。当我为
join\u room
中的
sid
字段插入随机内容时,我会得到一个名称空间错误。我已确保进口所有必要的物品等

下面是具体的错误消息

[2017-10-04 10:02:48,297] ERROR in app: Exception on /start_chat [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/agaidis/Desktop/challenge-backend-master/challenge-eng-base-master/backend-python/app.py", line 132, in start_chat
    on_join(friend_username)
  File "/Users/agaidis/Desktop/challenge-backend-master/challenge-eng-base-master/backend-python/app.py", line 152, in on_join
    join_room(receiver_name)  # start a chat room with the receiver's username
  File "/usr/local/lib/python3.6/site-packages/flask_socketio/__init__.py", line 756, in join_room
    sid = sid or flask.request.sid
  File "/usr/local/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
    return getattr(self._get_current_object(), name)
AttributeError: 'Request' object has no attribute 'sid'
127.0.0.1 - - [04/Oct/2017 10:02:48] "POST /start_chat HTTP/1.1" 500 -

您正在通过HTTP路由自己调用join()上的
函数。这不是应该的工作方式。当客户端对该事件调用
emit()
时,将调用Socket.IO事件。
request.sid
变量仅存在于Socket.IO事件处理程序的上下文中,HTTP处理程序中不存在该变量


根据堆栈跟踪,我认为您需要将
start\u chat
路由从HTTP更改为Socket.IO。客户端需要通过调用
emit()
而不是发送HTTP请求来请求加入聊天室。

谢谢!我是烧瓶和插座的傻瓜。为了实例化多个房间,客户端在客户端代码中打开新的套接字连接,对吗?他们看到的网页将是普通的HTML,包含特定于他们的开放式套接字的任何内容?您可以将单个客户端连接与多个房间相关联,无需创建多个连接。对于同一个客户端,多次调用
join_room()
完全可以。太棒了!非常感谢。