[轉]用xinetd實現小型網絡服務

轉自:http://www.linuxfly.org/post/565/

  linux 裏帶了一個 xinetd ,可以用來很方便地實現一些小型的網絡服務。處理網絡鏈接,fork 子進程等等都交給它來辦,而我們自己只需要操作標準輸入輸出的程序就可以了。

    先寫一個簡單的程序,我這裏就寫個php程序,其實用什麼都是可以的,然後放在 /opt/selboo.php :
 

<?php  
$in = fopen('php://stdin', 'r');  
$out = fopen('php://stdout', 'w');  
while ($r = fgets($in)) {  
    $r = trim($r);  
    if ($r == 'exit'|| $r == 'quit') {  
        break;  
    }  
    $nums = preg_split('/\s+/', $r);  
    $result = array_reduce($nums, create_function('$a, $b', 'return $a + $b;'));  
    fputs($out, "$result\n");  
}  
fclose($in);  
fclose($out);  
?>  

 


這個程序讀取輸入的每一行,按空白分割,然後把這些都加起來。說白了就是做個加法。在輸入 exit 或者 quit 的時候退出。可以先跑一下,看看效果。

然後就是用 xinetd 來把它變成一個服務了。
在 /etc/xinetd.d 裏新增一個文件,比如叫 selboo ,在裏面填上配置

service selboo
{
    disable = no
    socket_type = stream
    protocol = tcp
    port = 8000
    user = root
    server = /usr/local/php-5.2.14/bin/php
    server_args = /opt/selboo.php
    wait = no
    instances = 50
}


這裏 disable = no 表示把這個服務啓用;wait = no 是用多線程模式運行, instances 是最大實例數。其他幾個參數就不用多解釋了,看名字就知道。更多的配置可以去看底下的相關資料。
然後還需要在 /etc/services 里加上一條

selboo      8000/tcp


重啓一下 xinetd

[root@74-82-173-217 opt]# /etc/init.d/xinetd restart
Stopping xinetd:                                           [FAILED]
Starting xinetd:                                           [  OK  ]
[root@74-82-173-217 opt]#


netstat -tnlp 可以看到 8000 端口是 xinetd 在監聽

[root@74-82-173-217 opt]# netstat -tnlp|grep 8000
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      4455/xinetd

  
telnet 127.0.0.1 8000 來看看了。

紅色框 是輸入的數據
黃色框 是由/opt/selboo.php 計算結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章