V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
myrual
V2EX  ›  问与答

服务器端编程问题求助

  •  
  •   myrual · 2012-04-25 07:07:03 +08:00 · 2962 次点击
    这是一个创建于 4603 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我同事用C语言写了一个服务器端的TCP socket程序,用来截取一个嵌入式设备上发的http GET请求(http:host/asp.net?xxx=yyy&xxx=yyy),然后把参数拿到之后转发给本地的apache服务,然后用php来处理。 之所以这么做是因为他只会php,所以只能想到这个方案。
    他的c语言程序很简单, 监听本地端口,有连接进入就开一个线程进行参数截取操作,拿到参数转发本地之后就关闭socket,然后退出线程。整个程序没有用到select。
    现在遇到了两个问题:
    1. 如果用户多了,会发现服务器端有大量的处于 CLOSE_WAIT的连接。
    2. 用户多了以后,这个c语言写的TCP socket程序会占用大量的cpu时间。

    针对问题2:
    apache能处理类似 asp.net的http get请求么?
    如果使用python twisted来处理http get,会比现在的情况好么?
    web.py是不是更加合适?
    8 条回复    1970-01-01 08:00:00 +08:00
    ratazzi
        1
    ratazzi  
       2012-04-25 07:26:54 +08:00
    直接 iptables 就可以转发了,干嘛要自己写,内核处理效率多高啊,如果可以的话
    bearice
        2
    bearice  
       2012-04-25 08:32:51 +08:00
    1。CLOSE_WAIT是由于服务端主动关闭链接导致的,这是不可避免的。
    2。不明白你说的http get是什么样的请求。普通的HTTP请求的话不是直接用apache更加方便?
    myrual
        3
    myrual  
    OP
       2012-04-25 08:43:21 +08:00
    @bearice 谢谢。
    http get 的请求是这样的 GET http://xxx.com/abc.asp?arg1=val1&ar2=val2
    我的同事不懂如何用apache来处理这样的请求,我也不懂
    HowardMei
        4
    HowardMei  
       2012-04-25 09:28:40 +08:00
    mongrel2 ? 有个 www.photon-project.com/ 在做php+m2这件事情, 不知道有谁用于生产环境,所以要仔细权衡。

    话说还是python和nodejs在这方面优势比较大。
    HowardMei
        5
    HowardMei  
       2012-04-25 09:34:32 +08:00
    我一直关注能一体支持web和非web任务并发处理的系统,感觉mongrel2是很有前途的,准备挖下一个坑就用它试试看。
    9hills
        6
    9hills  
       2012-04-25 09:43:45 +08:00   ❤️ 1
    @myrual 用PHP+Apache很容易就能获得HTTP GET参数,和Apache无关,Apache就是个server,主要是PHP来处理。

    记得是 $_GET['arg1'] 之类的,PHP不熟。。
    binux
        7
    binux  
       2012-04-25 10:09:35 +08:00   ❤️ 1
    @myrual 你是指地址是abc.asp而不是abc.php? rewrite就好了啊
    bearice
        8
    bearice  
       2012-04-25 17:14:39 +08:00
    @myrual
    用Apache吧所有请求都rewrite到一个php上就好了,例如:
    <VirtualHost *:80>
    ServerName test
    DocumentRoot /path/to/your/script/dir
    RewriteEngine on
    RewriteRule ^(.*)$ /some.php [L]
    </VirtualHost>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2150 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:02 · PVG 09:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.