2016-02-02 16 views
6

Sto lavorando all'applicazione di trading in tempo reale utilizzando Node.js (v0.12.4) e Socket.io (1.3.2). In questo, sto affrontando un certo ritardo di circa (100 ms) quando la risposta che emette da Node.js a GUI (Socket.Io).Timeout da Node.js a Socket.io

Non ho idea del motivo per cui il ritardo è presente mentre si emettono dati da Node.js a GUI (Socket.IO).

Questo accade nel sito di produzione. E abbiamo provato a eseguire il debug di questo nella posizione del server di produzione anche a causa della latenza della rete. Ma lo stesso risultato.

Per favore qualcuno mi aiuti su questo?

+0

Quale browser usi (supponendo che il client sia un browser web). Qual è la configurazione del tuo server? Cosa hai già provato per eseguire il debug? –

+0

Dai un'occhiata a [socket.io debug] (http://socket.io/docs/logging-and-debugging/#) –

+0

Abbiamo provato Chrome e Firefox. Entrambi i browser sono in ritardo. Abbiamo aggiunto il timestamp prima di emettere i dati dal nodo e dopo aver ricevuto i dati dalla GUI (socket.io). La differenza di fuso orario è più di 100 ms – MadTech

risposta

5

Una cosa enorme da notare prima di fare quanto segue. Quando si calcolano i tempi dal back-end (lato server) al front-end (lato client) è necessario eseguirlo sullo stesso computer che utilizza lo stesso cristallo di temporizzazione .

temporizzazione con cristallo di quarzo anche su schede madri di alta qualità deffer l'una dall'altra.

Se si trova alcun ritardo nel calcolo ritardo dal back-end (lato server) al front-end (lato client) sullo stesso PCallora il ritardo che avete trovato in origine è stato causato da una la connessione di rete o la deferenza nei cristalli di temporizzazione delle schede madri. Quale eliminerebbe Node.js e Socket.io come causa del ritardo temporale.

Fondamentalmente è necessario scoprire dove si sta verificando il ritardo prima di poter risolvere il problema.

Che cosa è necessario fare è scoprire che cosa sta causando il massimo colpo di prestazioni nel progetto. Per fare ciò è necessario isolare l'ora in cui ogni processo impiega. È inoltre necessario misurare il ritardo temporale dal recupero iniziale dei dati al rilascio dei dati. Quindi misurare il ritardo di ciascuna funzione, metodo e processo. Prova ad isolare il problema. Devi chiedere che cosa impiega più tempo a fare?

Per scoprire da dove proviene il vostro successo in termini di prestazioni, è necessario effettuare le seguenti operazioni.

  1. Trova fuori quanto tempo necessario per il codice per ottenere le informazioni di cui ha bisogno.
  2. Trova fuori quanto tempo ogni processo manipolazione delle informazioni avviene prima di inviare i dati di cioè funzioni/metodi ...
  3. Dopo che le informazioni viene inviata trovare quanto tempo ci vuole per ottenere le informazioni al cliente lato e carico.
  4. Aggiungere tutte le ore e assicurarsi che sia uguale al ritardo delle prestazioni per assicurarsi di disporre di tutti i dati necessari per isolare la perdita di prestazioni.
  5. Ordinare ogni metodo, funzione, processo ... dal suo ritardo di tempo più dispendioso in termini di tempo.Quando trovi quali processi stanno causando i maggiori ritardi sarà quindi in grado di risolvere il problema ... O almeno esplorare soluzioni concrete ...

Ecco alcuni strumenti è possibile utilizzare per misurare le prestazioni in tutta il tuo codice.

Primo: Chrome è uno strumento davvero valido che consente di visualizzare le prestazioni di ogni parte del codice eseguito.

Secondo:performance-now node package. You can use it for dev performance testing.

Terzo:Stack overflow post on measuring time/performance in js.

Quarto: è possibile utilizzare le cose come console.time()

0

ho scoperto che il ritardo di tempo in cui sta accadendo.

Una volta, ho emesso i dati dal socket client al nodo, mostrerò il messaggio di avviso ("Dati elaborati"). Il messaggio di avviso richiede tempo per il rendering nella GUI.

Questo messaggio di avviso che blocca i dati di risposta dal nodo al socket.

Grazie per il tuo aiuto Ragazzi.