2010-10-12 95 views
6

我有一个可以通过TCP连接发送数据的GPS单元,但我没有修改它发送的消息的能力,所以它会来到我的服务器HTTP请求的形式 - 它只能以预定义的格式发送消息。Apache - 处理TCP连接,但不处理HTTP请求

所以,我有以下问题:

1)是否有可能具有的Apache处理不以HTTP请求的形式来建立TCP连接,并具有在发送要处理的信息由PHP脚本?

2)如果#1是不可能的,你会如何建议我处理发送到我的服务器的数据?

我可能会有数百个(如果不是数千)这些GPS单元发送数据到我的服务器,所以我需要一个有效的方式来处理所有的连接(这就是为什么我想要Apache或其他有生产价值的服务器处理TCP连接)。我希望能够处理通过与PHP的连接发送的消息,因为这是我的应用程序的其余部分运行的内容,并且我需要将发送的数据插入到数据库中(并且PHP非常擅长这样做之类的事情)。

万一它很重要,GPS单元可以通过UDP连接发送数据,但是从我读取的内容中,Apache不能使用UDP连接。

任何建议将受到欢迎。

回答

2

使用Apache将是不实际的,因为它使用核弹时,爆竹就足够了。在Linux上借助xinetd创建一个PHP服务器非常简单。

修改/etc/services说你希望你的服务端口56789.运行在/etc/services,添加一行:

gpsservice 56789/tcp 

/etc/xinet.d/,创建一个名为gpsservice文件:

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

创建你的PHP脚本( chmod它是可执行的):

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

重新启动xinetd service xinetd restart

您现在已经有一个用PHP编写的快速TCP服务器。

+0

谢谢 - 我会研究这一点。问题很简单 - 使用UDP连接进行这项工作需要什么?而且,这个简单的解决方案是否可以处理一小时的数千个请求 – Scott 2010-10-12 19:37:37

+0

您可以在服务文件和gpsservice文件中将'tcp'更改为'udp'。不建议使用UDP,因为它可能是不可靠的协议:http://www.mindcontrol。org /〜hplus/udp-vs-tcp.html – webbiedave 2010-10-12 20:09:21

+0

只是一个人站起来,没有超过65535的TCP端口号。 – dctucker 2013-09-19 15:25:11

3

回答您的问题:

1)不是没有大的修改

2)建立自己的服务器。这可以通过几个平台和几种语言轻松完成。我个人喜欢使用Twisted Framework,因为Python使用起来相对简单,而且框架非常灵活。