Para entender esta solicitud, necesito explicar un poco la historia de fondo.
Tenemos un dispositivo que solía funcionar sobre UDP y era razonablemente rápido. Una razón era que cualquier lado podía iniciar la transferencia de datos y otra razón era que los datos estaban presentes con menos sobrecarga. Se tomó la decisión de que este dispositivo tuviera un nuevo firmware y ahora usa HTTP y XML como protocolo, y es lento.
Una razón es que la comunicación la inicia solo el dispositivo (sondeo) y si el servidor tiene información para enviar, debe esperar hasta que el dispositivo solicite datos. El intervalo de sondeo es fijo y no se adapta de forma inteligente si los datos estaban disponibles o no.
La segunda razón en mi humilde opinión es que los datos no se transmiten al dispositivo en el formato que necesita. Cualquier discusión para implementar nuestra transferencia de datos a través de HTTP de una manera diferente no fue aceptada y rechazada por las razones más extrañas.
Mi última oportunidad de convencer a algunas personas es implementar yo mismo un prototipo del preprocesamiento necesario. Aquí está mi idea: no cambio la implementación del servidor ni el firmware del dispositivo. En cambio, conecto una Raspberry Pi con 2 adaptadores de red como un hombre en el medio que hace a) un sondeo un poco más sofisticado yb) convierte los datos de HTTP al formato necesario del dispositivo y los coloca directamente en los archivos correctos. Para fines de servicio, el dispositivo es compatible con SFTP, que puedo habilitar.
He calculado una transferencia de datos ~ 50 veces más rápida para a) y un procesamiento ~ 600 veces más rápido para b), por lo que parece que vale la pena como un proyecto de pasatiempo para los fines de semana.
Tengo Raspberry y obtuve un poco de conocimiento con Raspbian , así que me gustaría usarlo como sistema operativo. A continuación, creo que me recomendaron Python varias veces y me he tomado el tiempo de familiarizarme un poco con él, por lo que este será mi primer proyecto de Python del "mundo real". No me importan las versiones de Python, en duda, preferiría la versión 3 más nueva.
A continuación, necesitaría algunas bibliotecas para no reinventar la rueda:
Opcional: para que sea perfecto, me gustaría que funcione con cualquiera de nuestros dispositivos e implementar una función de detección automática, es decir, detecta la dirección IP y el puerto HTTP del dispositivo. Dado que ningún otro dispositivo está conectado al segundo puerto Ethernet, el adaptador de red podría ponerse en modo promiscuo y rastrear las solicitudes HTTP entrantes.
Inicio (pseudocódigo):
set-promiscuous-mode(true)
while (!autodetected):
wait-packet()
httpinfo=analyze-packet()
set-promiscuous-mode(false)
configure-network-adapter(httpinfo.IP+1)
start-http-server(httpinfo.destinationport)
start-http-client(httpinfo)
Servidor HTTP (pseudocódigo):
while(listen()):
if (ftp-data-written):
send-reload-response()
ftp-data-written=false
else:
send-empty-reponse()
Cliente HTTP:
certificate=read-crt-file()
ini=ftp-client-get(ini, certificate)
java=ftp-client-get(java, certificate)
while(true):
response=send-http-request()
if (is-empty(response)):
sleep(10)
continue
else if (is-ini-data(response)):
ini=merge-ini-data(ini, response)
ftp-client-put(ini, certificate)
ftp-data-written=true
else if (is-java-data(response)):
java=merge-java-data(java, response)
ftp-client-put(java, certificate)
ftp-data-written=true
Tienes toda una lista de la compra. Sugiero echar un vistazo a:
Si todavía hay algunos que faltan, haga una pregunta más específica aquí.