首页 > 开发 > Python > 正文

关于Flask-socketio和socketIO_client的使用问题。

2017-09-06 19:32:10  来源:网友分享

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

#codeing=utf-8from flask import Flask, render_templatefrom flask.ext.socketio import SocketIOapp = 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, BaseNamespacedef 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

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

解决方案

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

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