Python和Socket.IO - 应用程序在连接后挂起

时间:2016-05-05 18:50:25

标签: python sockets socket.io flask-socketio python-sockets

我正在开发一个python应用程序。基本实现要求Raspberry Pi连接到主服务器并共享消息。服务器将运行python应用程序来分析数据并将信息返回给Raspberry Pi。

我正在使用服务器部分的python-socketio和Raspberry Pi代码的socketio.client来实现这个系统。

我的问题是我能够连接到服务器并收到响应消息,但程序在客户端挂起。

我的服务器代码是:

import socketio
import eventlet
from flask import Flask

# Define Socket.IO server and application wrapper
sio = socketio.Server()
app = Flask(__name__)

@sio.on('connect', namespace = '/test')
def connect(sid, environ):
    print 'New Connection ' + sid
    sio.emit("server_response", sid, room = sid, namespace = '/test' )

@sio.on('message', namespace = '/test')
def message(sid, data):
    print 'message ' + sid + " " + data
    sio.emit("server_reply", data = "Hello", room = sid, namespace = '/test')

@sio.on('disconnect', namespace = '/test')
def disconnect(sid):
    print 'disconnect ' + sid

if __name__ == '__main__':
    # Wrap Flask application with Socket.IO's middleware
    app = socketio.Middleware(sio, app)

    # Deploy as an eventlet WSGI server
    eventlet.wsgi.server(eventlet.listen(('',8000)), app)

至于客户端部分,我正在使用此代码:

from socketIO_client import SocketIO, BaseNamespace
global sio
global testNamespace
global myId

class testNamespace(BaseNamespace):

    def on_server_response(self, userID):
        myId = userID
        print "Socket connection accepted"
        print "I was assigned the id: " + myId

    def on_server_reply(self, data):
        print "message response: " + data

if __name__ == "__main__":
    # Establish the connection
    sio = SocketIO('localhost', 8000)
    testNamespace = sio.define(testNamespace, '/test')

    print "Going to emit message"
    testNamespace.emit("message", "Hello")

    sio.wait()

出于某种原因,我得到了具有指定ID的服务器响应,但程序从未到达

print "Going to emit message"

我最初认为它与命名空间有关,但由于打印指令从未发生过,我不明白我做错了什么。

修改

我注意到如果on_server_response我尝试发出消息Hello with

self.emit("message", "Hello")

我可以将消息发送到服务器并获得它的回复。 我现在还不明白它是如何能够在类定义之外的主程序上发出事件的。

0 个答案:

没有答案