2010-10-12 1 views
6

Ho un'unità GPS in grado di inviare dati tramite una connessione TCP, ma non ho la possibilità di modificare il messaggio che invia così verrebbe sul mio server in la forma di una richiesta HTTP: può solo inviare un messaggio in un formato predefinito.Apache - gestisce le connessioni TCP, ma non le richieste HTTP

Così, ho le seguenti domande:

1) E 'possibile avere Apache gestire una connessione TCP che non arriva sotto forma di una richiesta HTTP, e hanno il messaggio che viene inviato da lavorare da uno script PHP?

2) Se # 1 non è possibile, come consiglieresti che gestisco i dati inviati al mio server?

Potrei avere centinaia, se non migliaia, di queste unità GPS che inviano dati al mio server, quindi ho bisogno di un modo efficiente per gestire tutte le connessioni in arrivo (ecco perché volevo Apache o qualche altro server di produzione degno per gestire le connessioni TCP). Mi piacerebbe essere in grado di gestire il messaggio inviato tramite la connessione con PHP poiché è ciò su cui gira il resto della mia applicazione, e dovrò inserire i dati inviati in un database (e PHP è davvero bravo a farlo tipo di cosa).

Se è importante, l'unità GPS può inviare dati tramite una connessione UDP, ma da quello che ho letto Apache non funziona con le connessioni UDP.

Qualsiasi suggerimento sarebbe benvenuto.

risposta

2

L'uso di Apache non sarebbe pratico poiché utilizza una bomba nucleare quando un petardo sarà sufficiente. Creare un server PHP è abbastanza semplice su Linux con l'aiuto di xinetd.

Modifica /etc/services. dire che si desidera il vostro servizio per l'esecuzione sulla porta 56789. In /etc/services, aggiungere la riga:

gpsservice 56789/tcp 

In /etc/xinet.d/, creare un file denominato gpsservice:

service gpsservice 
{ 
    socket_type    = stream 
    protocol    = tcp 
    wait     = no 
    user     = yourusername 
    server     = /path/to/your/script 
    log_on_success   = HOST PID 
    disable     = no 
} 

Crea il tuo script PHP (chmod it per essere eseguibile):

#!/usr/bin/php 
<?php 
// do stuff 
?> 

Restart xinetd service xinetd restart

Ora hai un server TCP veloce scritto in PHP.

+0

Grazie - esaminerò questo. Domanda veloce però - cosa ci vorrebbe per far funzionare questo con le connessioni UDP? E questa semplice soluzione potrebbe gestire migliaia di richieste all'ora? – Scott

+0

È possibile cambiare 'tcp' in' udp' nel file di servizio e nel file gpsservice. Non è consigliabile utilizzare UDP in quanto può essere un protocollo inaffidabile: http: //www.mindcontrol.org/~ hplus/udp-vs-tcp.html – webbiedave

+0

Solo un avviso, non ci sono numeri di porta TCP oltre 65535. – dctucker

3

per rispondere alle vostre domande:

1) Non senza modifica rilevante del

2) creare il proprio server. Questo è fatto facilmente con diverse piattaforme e in diverse lingue. Personalmente mi piace usare lo Twisted Framework perché Python è relativamente semplice da usare e il framework è molto flessibile.