контекст запроса доступа из socketio в фляге - PullRequest
0 голосов
/ 27 октября 2018

после долгого поиска я отправляю свой вопрос, поэтому, пожалуйста, поправьте меня, если я что-то не так понял,

1 - Сокет не имеет контекста запроса, потому что он находится на другом уровне, чем http.

Я использую флешку, когда я работаю с сервером socketIO и eventlet, моя проблема в том, что я хочу получить доступ к куки для пользователя в конкретном сокете, чтобы я мог связать каждого пользователя с его сообщениями:

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, один для 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': []}

по крайней мере, я хочу понять, как оно отправляется и как его отключить ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...