素材牛VIP会员
关于Flask-socketio和socketIO_client的使用问题。
 ah***xr  分类:Python  人气:1821  回帖:1  发布于6年前 收藏

软件的目的是使用socketio 让多个程序进行通话。
以下是服务端的代码,使用的是Flask-socketio

#codeing=utf-8
from flask import Flask, render_template
from flask.ext.socketio import SocketIO

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

@socketio.on('message',namespace='/msg')
def on_connect(message):
    emit('my response', {'data': 'Connected'+message})

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

启动服务器的命令如下:

gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker app:app --bind=0.0.0.0:5001

下面是客户端的代码,使用了socketIO_client.

from socketIO_client import SocketIO, BaseNamespace

def on_response(*args):
    print('on_response', args)

socket = SocketIO('bt.gg',5001)
chat = socket.define(BaseNamespace, '/msg')
chat.emit('message')
chat.on('my response', on_response)

在运行过程中,发现服务端一直在提示错误。

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gevent/pywsgi.py", line 508, in handle_one_response
    self.run_application()
  File "/usr/local/lib/python2.7/dist-packages/gevent/pywsgi.py", line 494, in run_application
    self.result = self.application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask_socketio/__init__.py", line 27, in __call__
    raise RuntimeError('You need to use a gevent-socketio server.')
RuntimeError: You need to use a gevent-socketio server.
{'GATEWAY_INTERFACE': 'CGI/1.1',
 'HTTP_ACCEPT': '*/*',
 'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
 'HTTP_CONNECTION': 'keep-alive',
 'HTTP_HOST': 'bt.gg:8800',
 'HTTP_USER_AGENT': 'python-requests/2.7.0 CPython/2.7.10 Windows/8',
 'PATH_INFO': '/socket.io/',
 'QUERY_STRING': 'transport=polling&EIO=3&t=1441511864251-0',
 'RAW_URI': '/socket.io/?transport=polling&EIO=3&t=1441511864251-0',
 'REMOTE_ADDR': '180.175.170.224',
 'REMOTE_PORT': '61238',
 'REQUEST_METHOD': 'GET',
 'SCRIPT_NAME': '',
 'SERVER_NAME': 'server',
 'SERVER_PORT': '8800',
 'SERVER_PROTOCOL': 'HTTP/1.1',
 'SERVER_SOFTWARE': 'gevent/1.0 Python/2.7',
 'gunicorn.sock': <socket at 0x7feeba8abe90 fileno=12 sock=103.242.133.124:8800 peer=180.175.170.224:61238>,
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7feebe56a1e0>,
 'wsgi.input': <gevent.pywsgi.Input object at 0x7feeba84f990>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)} failed with RuntimeError

求各位朋友看一下,我写的代码问题出在哪?

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv7 码师
to***09 PHP开发工程师 6年前#1

Flask-socketio 是使用的 0.x版本的socketio 协议
socketIO_client是使用的 1.x版本的socketio 协议

因为协议的版本问题,导致这两个不兼容。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取