2010-10-12 132 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使用起來相對簡單,而且框架非常靈活。