简体   繁体   English

使用 Flask-socketio 和 socketIO 客户端

[英]Using Flask-socketio and the socketIO client

I'm currently trying to understand how sockets work.我目前正在尝试了解套接字是如何工作的。 I'm using Flask-socketio and a python socketio client and running through a basic example.我正在使用 Flask-socketio 和 python socketio 客户端并运行一个基本示例。 Here is what I have done so far这是我到目前为止所做的

app.py应用程序.py

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('aaa')
def test_connect():
    print("Welcome, aaa received")
    emit('aaa_response', {'data': 'Server'})

if __name__ == '__main__':
    socketio.run(app, port=8000)

client.py客户端.py

from socketIO_client import SocketIO, LoggingNamespace

def on_aaa_response(args):
    print('on_aaa_response', args['data'])

socketIO = SocketIO('localhost', 8000, LoggingNamespace)
socketIO.on('aaa_response', on_aaa_response)
socketIO.emit('aaa')
socketIO.wait(seconds=1)

I get an assertion error when I run the client.py .运行client.py时出现断言错误。 I do see the server printing "Welcome, aaa recived" though.我确实看到服务器打印"Welcome, aaa recived" I don't know what am I doing wrong here, If thats required here is my log我不知道我在这里做错了什么,如果这是我的日志

Error log错误日志

Exception in thread Thread-1:
Traceback (most recent call last):
  File "c:\users\dj\appdata\local\programs\python\python36\Lib\threading.py", li
ne 916, in _bootstrap_inner
    self.run()
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\heartbeats.py", line 27, in run
    self._send_heartbeat()
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 203, in _ping
    engineIO_packet_type, engineIO_packet_data)
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\transports.py", line 109, in send_packet
    assert response.content == b'ok'
AssertionError

Traceback (most recent call last):
  File "demo.py", line 8, in <module>
    socketIO.emit('aaa')
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 424, in emit
    self._message(str(socketIO_packet_type) + socketIO_packet_data)
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 33, in wrap
    return f(*args, **kw)
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 219, in _message
    transport.send_packet(engineIO_packet_type, engineIO_packet_data)
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\transports.py", line 109, in send_packet
    assert response.content == b'ok'
AssertionError
Exception ignored in: <bound method SocketIO.__del__ of <socketIO_client.SocketI
O object at 0x00000028079DC320>>
Traceback (most recent call last):
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 364, in __del__
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 400, in disconnect
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\__init__.py", line 193, in _close
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\transports.py", line 108, in send_packet
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\socketIO_c
lient\transports.py", line 191, in get_response
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\requests\s
essions.py", line 555, in post
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\requests\s
essions.py", line 494, in request
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\requests\s
essions.py", line 419, in prepare_request
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\requests\c
ookies.py", line 537, in merge_cookies
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\site-packages\requests\c
ookies.py", line 353, in update
  File "C:\Users\Dj\Desktop\Flask\FLASK-SOCKET\venv\lib\copy.py", line 96, in co
py
ImportError: sys.meta_path is None, Python is likely shutting down

Based on the stack trace, I could not identify the version of the socketIO-client package that you are using.根据堆栈跟踪,我无法识别您正在使用的socketIO-client包的版本。 It does not appear to be a current one.它似乎不是当前的。

I have tested your two applications here and they seem to work perfectly fine with version 0.7.2 of the client.我在这里测试了您的两个应用程序,它们似乎与客户端的 0.7.2 版本完美配合。 I suggest you run pip install --upgrade socketIO-client==0.7.2 and then try again.我建议你运行pip install --upgrade socketIO-client==0.7.2然后再试一次。

I would recommend using python-socketio for the client and flask + flask-socketio for the server.我建议将python-socketio用于客户端,将flask + flask-socketio用于服务器。

Installation安装

pip install python-socketio
pip install flask
pip install flask-socketio

Server服务器

from flask import Flask
from flask_socketio import SocketIO, emit
import logging

app = Flask(__name__)
socketio = SocketIO(app)

log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)


@socketio.on('message')
def message(data):
    print(data)  # {'from': 'client'}
    emit('response', {'from': 'server'})


if __name__ == '__main__':
    socketio.run(app, port=8000, debug=True)

Client客户

import socketio

sio = socketio.Client()
sio.connect('http://localhost:8000')

sio.emit('message', {'from': 'client'})


@sio.on('response')
def response(data):
    print(data)  # {'from': 'server'}

    sio.disconnect()
    exit(0)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM