Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 30, 2018 08:15:45

Datochino
Зарегистрирован: 2018-12-30
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Python,tornado,нужна помощь с повторной отправкой страницы

Пытаюсь изучать вебсокеты по методичке,нашел задание и столкнулся с проблемой.Нужно создать клиент-серверное приложение с примерным принципом работы:Запускается сервер,ждет пока к нему подключится клиент,от клиента поступают какие либо данные,и после сервер генерирует и запускает новую страницу где реализована работа с клиентом,примерный код ниже.Собственно вопрос,как сделать так чтобы,сгенерированная страница,автоматически запускалась после генерирования.То есть открывается страница client.html,а после нее уже новая сгенерированная.Попытка заново вызвывать функцию get не удалась,документацию по нужной теме тоже не могу найти

 import threading
import tornado.websocket
import tornado.web
import tornado.ioloop
import lxml.etree as ET
#обработчик запросов к http серверу
strfile="client.html"
class MainHandler(tornado.web.RequestHandler):
    #обработка запроса get
    def get(self):
        print('Get')
       #передаем нашу страницу в которой реализована работа с клиентом
        self.render(strfile)
   
   
#обработчик событий вебсоккетов
class EchoWebSocket(tornado.websocket.WebSocketHandler):
    clients = []#массив клиентов
    fl = True
    index = 0
    #процедура отправки клиенту текущего индекса через 3 сек
    def go(self,client):
        print('ok')
        if(self.fl):
            self.index=self.index+1
            s = u'{"type": "chat", "data": "' +str(self.index) +'"}'
            print("send message : "+s)
        #посылаем сообщение клиенту
        client.write_message(s)
  #проверяются и датся права на действия с соккетом, здесь права даются всем
    def check_origin(self, origin):
        return True
   #обработка события открытия соединения
    def open(self):
        print("Client open")
        #добавляем клиента в список
        self.clients.append(self)
        self.fl = True
        #запускаем поток отправки сообщение клиенту
        self.go(self)
    #обработка прихода события от сервера########################
    def on_message(self, message):
        print("Client message "+message)
   
        #парсим xml файл в dom
        dom = ET.parse("file.xml")
        #парсим шаблон в dom
        xslt = ET.parse("file.xslt")
        #получаем трансформер
        transform = ET.XSLT(xslt)
        #преобразуем xml с помощью трансформера xslt
        newhtml = transform(dom)
        #преобразуем из памяти dom в строку, возможно, понадобится указать кодировку
        strfile = ET.tostring(newhtml)###новая сгенерированная страница
        
    #обработка события закрытия соккета клиента############################
    def on_close(self):
        self.fl = False
        #удаляем клиента из списка
        self.clients.remove(self)
        print("WebSocket closed")
        #создаем приложение tornado с обработчиком вебсоккетов и http сервером
app = tornado.web.Application([(r"/ws", EchoWebSocket),(r'/', MainHandler)])
#прослушиваем на порту
app.listen(10556)
print("Start Server")
#запускаем цикл прослушивания и обработки событий
tornado.ioloop.IOLoop.instance().start()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version