来自烧瓶中的socketio的访问请求上下文

时间:2018-10-27 17:36:33

标签: python cookies flask socket.io

我经过长时间搜索后发表了我的问题,所以如果我理解不对,请纠正我,

1-套接字没有请求上下文,因为它们与http位于不同的层。

我正在使用flask,当我使用socketIO服务器和eventlet时,我的问题是我想在特定套接字中访问该用户的cookie,以便可以将每个用户与其消息链接起来:

app = Flask(__name__) sio = 
socketio.Server(logger=True, async_mode ='eventlet') 
app.wsgi_app = socketio.Middleware(sio, app.wsgi_app) 
app.config['SECRET_KEY'] = 'secret!'

和我的客户页面代码:

@sio.on('test', namespace='/test')
def test(sid, message2, cookie):
      users[username] = request.cookies

引发的错误:RuntimeError:在请求上下文之外工作。

当我使用如下的flask_SocketIO时:

sio = SocketIO(app, async_mode =async_mode)

我收到此错误:

  File "D:\apps\Python37\lib\site-packages\eventlet\wsgi.py", line 547,   in handle_one_response
  result = self.application(self.environ, start_response)
  File "D:\apps\Python37\lib\site-packages\flask\app.py", line 2309, in   __call__
  return self.wsgi_app(environ, start_response)
  File "D:\apps\Python37\lib\site-packages\engineio\middleware.py", line 47,   in __call__
  return self.engineio_app.handle_request(environ, start_response)
  AttributeError: 'SocketIO' object has no attribute 'handle_request'

提前谢谢..

更新1:

编辑以下服务器参数时:

socketio.Server(logger=True, async_mode ='eventlet', managed_session= False)

我正在为socketIO中的每个函数使用args,其中一个用于sid,另一个则如下所示:

{'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>, 'wsgi.version': (1, 0), 'wsgi.multithread': True, 'wsgi.multiprocess': False, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '', 'RAW_PATH_INFO': '/socket.io/', 'PATH_INFO': '/socket.io/', 'QUERY_STRING': 'EIO=3&transport=polling&t=MQvAOQm', 'CONTENT_TYPE': 'text/plain', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_NAME': '127.0.0.1', 'SERVER_PORT': '5000', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': '54527', 'GATEWAY_INTERFACE': 'CGI/1.1', 'headers_raw': (('Host', 'localhost:5000'), ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0'), ('Accept', '*/*'), ('Accept-Language', 'en-US,en;q=0.5'), ('Accept-Encoding', 'gzip, deflate'), ('Referer', 'http://localhost:5000/ChateApp/f'), ('Connection', 'keep-alive'), ('Cookie', 'io=e3978f1993804d519f81e65a3214fae3; my amazing cookie="nom nom nom"; session=.eJwlz9tOgzAAgOF34RYTpRtBTHYhJzm1BbrKdkWAAZJBt0IHq8Z3V-ML_Pn-LyXDGCovykk3Sl-O2J4NDDaOJUS5ZaBpeTKN2R2G5mLIyykBTjsJj_lIrSvgd8OCykOmEW18zfNsjcXcQ8KX0I16G65hnSZskAcKUtnvTcGnce8-OSqf5lKP2efHFTgxKXUAqQ22A8Prbqc8KMQlJMCoiNzjL6zyVMtbaZMjtXLfl6DGo7jJPdA3ulzUEj3zjggmLSjTWxe1Wngxz2KKafNG2fGRX9vz_BelxM0KhIsAFf_H2vcP_0NSpg.DrT74g.p0GJQyiDUMLGijPeNX4Dn6Gs1fU')), 'HTTP_HOST': 'localhost:5000', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0', 'HTTP_ACCEPT': '*/*', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.5', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 'HTTP_REFERER': 'http://localhost:5000/ChateApp/f', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'io=e3978f1993804d519f81e65a3214fae3; my amazing cookie="nom nom nom"; session=.eJwlz9tOgzAAgOF34RYTpRtBTHYhJzm1BbrKdkWAAZJBt0IHq8Z3V-ML_Pn-LyXDGCovykk3Sl-O2J4NDDaOJUS5ZaBpeTKN2R2G5mLIyykBTjsJj_lIrSvgd8OCykOmEW18zfNsjcXcQ8KX0I16G65hnSZskAcKUtnvTcGnce8-OSqf5lKP2efHFTgxKXUAqQ22A8Prbqc8KMQlJMCoiNzjL6zyVMtbaZMjtXLfl6DGo7jJPdA3ulzUEj3zjggmLSjTWxe1Wngxz2KKafNG2fGRX9vz_BelxM0KhIsAFf_H2vcP_0NSpg.DrT74g.p0GJQyiDUMLGijPeNX4Dn6Gs1fU', 'wsgi.input': <eventlet.wsgi.Input object at 0x000002407271FF28>, 'eventlet.input': <eventlet.wsgi.Input object at 0x000002407271FF28>, 'eventlet.posthooks': []}

至少我想了解它的发送方式以及如何暂时将其禁用..

0 个答案:

没有答案