В JavaScript с HTML, открытие Eventource для сервера разрывает источники и сетевые вкладки Chrome в Devtools?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 В JavaScript с HTML, открытие Eventource для сервера разрывает источники и сетевые вкладки Chrome в Devtools?

Сообщение Anonymous »

Я работал над новым проектом JavaScript, чтобы отобразить фронт для кучи данных, которые собираются в Python и транслируют на фронт. Что -то, что причиняет мне больших проблем, так это то, что Chrome Devtools не работают должным образом, пока этот поток открыт. Например, если я выставляю вкладку «Источники», источники не отображаются. Если я развлекуте вкладку сети, там нет никаких соединений. выскакивает. Точно так же вкладка «Сеть» ничего не показывает, пока поток открыт. Мало того, что он не показывает работающий поток (который, как я знаю, открыт, потому что обновления отображаются на странице), но даже не показывают нагрузку Localhost: 8000/. Убивание бэкэнда заставляет вкладку «Сеть» отображать неудачную нагрузку favicon.ico и все повторные поиски потока, но не начальную нагрузку /ни начальный запуск потока. < /P>
Я снял это до очень простого примера резо. Обратите внимание, что выделение синтаксиса на Stackoverflow вводит в заблуждение. Это очень смущено сочетанием JavaScript и Python. < /P>
#!/usr/bin/env python3

from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from threading import Thread
import time
from urllib.parse import urlparse, parse_qs

index = '''


devtools lockup demo


No data received yet.


/*TODO: this doesn't really need to be a class.*/
class DataRelay {
constructor() {
const stream_url = '/stream/';
this.event_source = new EventSource(stream_url);
this.event_source.onmessage = (event) => {
document.getElementById('counter').textContent = event.data;
};
this.event_source.onerror = (error) => {
console.error('event_source.onerror:', error);
};
console.log('data stream handler is set up');
}
}

let data_relay = new DataRelay();


'''

def encode_as_wire_message(data):
# The "data: " preamble, the "\n\n" terminator, and the utf8 encoding are all
# mandatory for streams.
return bytes('data: ' + data + '\n\n', 'utf8')

#TODO: Get this constant in the class
class RequestHandler(BaseHTTPRequestHandler):
def add_misc_headers(self, content_type):
self.send_header('Content-type', content_type)
self.send_header('Cache-Control', 'no-cache')
self.send_header('Connection', 'keep-alive')
self.send_header('Access-Control-Allow-Credentials', 'true')
self.send_header('Access-Control-Allow-Origin', '*')

def serve_index(self):
self.send_response(200)
self.add_misc_headers('text/html')
self.end_headers()

self.wfile.write(bytes(index, 'utf8'))

def serve_stream(self):
self.send_response(200)
self.add_misc_headers('text/event-stream')
self.end_headers()

print('Beginning to serve stream...')

for x in range(1000000):
message = encode_as_wire_message(str(x))
print(message)
self.wfile.write(message)
self.wfile.flush()
time.sleep(1.0)

def do_GET(self):
parsed_url = urlparse(self.path)
if parsed_url.path == '/':
self.serve_index()
elif parsed_url.path == '/stream/':
self.serve_stream()

def run(server_class=ThreadingHTTPServer, handler_class=RequestHandler):
server_address = ('', 8000) # serve on all interfaces, port 8000
httpd = server_class(server_address, handler_class)
print('starting httpd... Open a connection to http://localhost:8000')
httpd.serve_forever()

run()


Подробнее здесь: https://stackoverflow.com/questions/794 ... aks-chrome
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»