问题描述:   每个页面的工作量都很大,apache web服务器需要很长时间才能完成工作   现在 在一个页面的response响应 webserver还没有 完成时,同一个session又有请求新的页面,   期望server可以终止该session的前一个request   希望在不修改apache web server的代码 完成上述期望不是一个复杂的问题,但貌似是一个不可解问题如果可以分配到的话,回复就给分

解决方案 »

  1.   

    开始响应的时候看$_SESSION[session_id()]有没有设置,
    如果有,就退出。
    否则,就设
    $_SESSION[session_id()] = TRUE;
      

  2.   


    if ($_SESSION['singletone_process_id']) {
      posix_kill($_SESSION['singletone_process_id'], SIGKILL);
    }
    $_SESSION['singletone_process_id'] = posix_getpid();/*
    Your code...
    */$_SESSION['singletone_process_id'] = 0;
      

  3.   

    web server都是多线程的吧,你怎么控制?
      

  4.   

    这个方法理论上还是可以解决大部分问题的,但是 php默认是不支持进程处理的, 需要重新编译php,还有没有其他更好的方法啊?
      

  5.   

    你把前一个的连接id存入session,同一个session又有请求新的页面,就取到id调用mysql_close不就行了。
      

  6.   

    我觉得web server 中应该有 对session的request队列,即进程队列,因此在  web server 中结束 同一session的 前面的 request响应 应该是可以的但是关键就是 web server是否有这样的接口 给外层调用
      

  7.   

    mysql_close?
    好像是一种好方法,试试看……
      

  8.   

    这不是php能力范围里的事情
    因为既然已经进入了php程序,就表示webserver已经对response做出了响应 
      

  9.   

    是啊,但是server response时有很多任务要完成,耗时间很长,就是期望 web server能给出一个方法 在 这些 response 没有完成前结束 
      

  10.   

    所以你应该去apache或iis版面寻求答案
      

  11.   

    上面说的mysql_close理论上是不可取的,因为不同进程的资源符应该是无法通用的。如果一定要在不重新编译的情况下实现,可以考虑通过类似 进程通讯、外部共享存储 等等方式来交换信号,并且执行过程中定期检查信号,当发现有新进入进程时关闭本进程,而新进程也应该等待老进程结束以后才进入。比如Memcache设置二个key,其值为自己进程开始时随机创建的一个unique id。 
    当新进程进入时,修改第一个key的值本进程的unique id,然后等待另外一个key被老进程发现,并在退出前设置另外一个key为新进程的unique id(从前一个key取得),然后才开始继续执行,并定期检查自己后面是否有更新的进程。Memcache、File Cache、SHM等等都可以实现。 只是要注意一下加锁等互斥的问题。