正在加载...

用xinetd实现小型网络服务

[ 2010/09/27 16:31 | by selboo ]



      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'&#124;| $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 计算结果
Tags: ,
,
发表评论
表情
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]