2010-10-12 19 views
6

Tengo una unidad GPS que puede enviar datos a través de una conexión TCP, pero no tengo la capacidad de modificar el mensaje que envía para que llegue a mi servidor en la forma de una solicitud HTTP: solo puede enviar un mensaje en un formato predefinido.Apache - manejo de conexiones TCP, pero no solicitudes HTTP

lo tanto, tengo las siguientes preguntas:

1) ¿Es posible tener Apache manejar una conexión TCP que no viene en forma de una petición HTTP, y tienen el mensaje que se envía ser procesado por un script PHP?

2) Si el # 1 no es posible, ¿cómo recomendaría manejar los datos que se envían a mi servidor?

Posiblemente tenga cientos, si no miles, de estas unidades de GPS que envían datos a mi servidor, así que necesito una manera eficiente de manejar todas las conexiones entrantes (es por eso que quería Apache o algún otro servidor de producción digno para manejar las conexiones TCP). Me gustaría poder tratar el mensaje enviado a través de la conexión con PHP, ya que es en eso que se ejecuta el resto de mi aplicación, y tendré que insertar los datos enviados a una base de datos (y PHP es realmente bueno al hacer eso). Tipo de cosa).

En caso de que importe, la unidad GPS puede enviar datos a través de una conexión UDP, pero por lo que he leído, Apache no funciona con conexiones UDP.

Cualquier sugerencia sería bienvenida.

Respuesta

2

Usar Apache no sería práctico, ya que usaría una bomba nuclear cuando un petardo sería suficiente. Crear un servidor PHP es bastante simple en Linux con la ayuda de xinetd.

Modificar /etc/services. Digamos que quiere que su servicio se ejecute en el puerto 56789. En /etc/services, añadir la línea:

gpsservice 56789/tcp 

En /etc/xinet.d/, crear un archivo llamado gpsservice:

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

Crear su script PHP (chmod es ejecutable):

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

Reiniciar xinetd service xinetd restart

Ahora tiene un servidor TCP rápido escrito en PHP.

+0

Gracias - Lo investigaré. Sin embargo, pregunta rápida: ¿qué se necesitaría para que esto funcione con las conexiones UDP? Y, ¿esta simple solución manejaría miles de solicitudes por hora? – Scott

+0

Puede cambiar 'tcp' por' udp' en el archivo de servicio y el archivo gpsservice. No se recomienda usar UDP ya que puede ser un protocolo no confiable: http: //www.mindcontrol.org/~ hplus/udp-vs-tcp.html – webbiedave

+0

Solo un aviso, no hay números de puerto TCP más allá de 65535. – dctucker

3

para responder a sus preguntas:

1) No sin grandes modificaciones

2) Construir su propio servidor. Esto se hace fácilmente con varias plataformas y en varios idiomas. Personalmente me gusta usar el Twisted Framework porque Python es relativamente simple de usar y el marco es muy flexible.

Cuestiones relacionadas