Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python运行套接字IO并执行另一个任务_Python_Socket.io_Multitasking - Fatal编程技术网

Python运行套接字IO并执行另一个任务

Python运行套接字IO并执行另一个任务,python,socket.io,multitasking,Python,Socket.io,Multitasking,我正在运行socketio服务器,一切正常。 有人写信给消息,我会回复消息,但我必须控制另一个长轮询页面 我无法在我的socketio服务器中实现 我的SocketIO服务器代码: from socketio import socketio_manage from socketio.server import SocketIOServer from socketio.namespace import BaseNamespace from socketio.mixins import RoomsM

我正在运行socketio服务器,一切正常。 有人写信给消息,我会回复消息,但我必须控制另一个长轮询页面

我无法在我的socketio服务器中实现

我的SocketIO服务器代码:

from socketio import socketio_manage
from socketio.server import SocketIOServer
from socketio.namespace import BaseNamespace
from socketio.mixins import RoomsMixin, BroadcastMixin

class ChatNamespace(BaseNamespace, RoomsMixin, BroadcastMixin):

    def on_nickname(self, nickname):
        self.request['nicknames'].append(nickname)
        self.socket.session['nickname'] = nickname
        self.broadcast_event('announcement', '%s has connected' % nickname)
        self.broadcast_event('nicknames', self.request['nicknames'])
        # Just have them join a default-named room
        self.join('main_room')

    def recv_disconnect(self):
        # Remove nickname from the list.
        nickname = self.socket.session['nickname']
        self.request['nicknames'].remove(nickname)
        self.broadcast_event('announcement', '%s has disconnected' % nickname)
        self.broadcast_event('nicknames', self.request['nicknames'])

        self.disconnect(silent=True)

    def on_user_message(self, msg):
        self.emit_to_room('main_room', 'msg_to_room',
            self.socket.session['nickname'], msg)
        print "%s : %s"%(self.socket.session['nickname'], msg)

    def recv_message(self, message):
        print "PING!!!", message

class Application(object):
    def __init__(self):
        self.buffer = []
        self.request = {
            'nicknames': [],
        }

    def __call__(self, environ, start_response):
        path = environ['PATH_INFO'].strip('/')

        if path.startswith("socket.io"):
            socketio_manage(environ, {'': ChatNamespace}, self.request)
        else:
            return not_found(start_response)


def not_found(start_response):
    start_response('404 Not Found', [])
    return ['<h1>Not Found</h1>']

if __name__ == '__main__':
    print 'Listening on port 8080 and on port 843 (flash policy server)'
    SocketIOServer(('0.0.0.0', 8080), Application(),
        resource="socket.io", policy_server=True,
        policy_listener=('0.0.0.0', 10843)).serve_forever()
对不起,我的英语这么差。 我画了一张图表也许会有帮助

    def __init__(self):
        self.s_url = "http://control.site.com/getUpdates"
        try:
            self.last_update_id = open('last_update_id.txt', 'r').read()
        except Exception, e:
            self.last_update_id = 0
        print self.last_update_id
        self.url = "http://control.site.com/getUpdates?offset=%s"%self.last_update_id
        self.getUpdates()

    def getUpdates(self):
        response = requests.get(self.url)

        data_json = json.loads(response.content)
        data_result = data_json['result']

        if int(data_result[-1]["update_id"]) != int(self.last_update_id):
            readResponse(data_result)
            self.last_update_id = data_result[-1]["update_id"]

            last_update_id_file =  open('last_update_id.txt', 'wb')
            last_update_id_file.write(str(self.last_update_id))
            last_update_id_file.close()
            self.url = "%s?offset=%s"%(self.s_url, self.last_update_id)
        else:
            print data_result[-1]['update_id']

        time.sleep(1)
        self.getUpdates()

    def readResponse(self, data):
        self.sendMsg('Control OK!')
        #now i must send message to user via socket io server...