本帖最后由 cnaijiahus 于 2013-06-29 16:17:24 编辑

解决方案 »

  1.   

    你的方案有问题
    sleep 将挂起当前的程序,但并不发出通讯结束的信号
    客户端由于没有收到结束信号,所以不会关闭通讯通道。
    这将造成虽然服务器处于闲置状态,而其他客户却不能访问的局面,因为服务器的并发响应数是有限的按照你的情况,可以将 session 的工作方式由默认的文件方式改为数据库方式
    改变 session 失效期和显式的执行相应的 gc 方法就可以了
      

  2.   

    如果一个请求还没有返回的情况,再发起一个相同的请求,就好像我的方案里面会发生的情况一样,单从这一点来说可行吗?
    另外好像一些聊天的程序为了降低请求频率都会让程序sleep和循环一段时间再返回吧?如果这样是可行的那我的方案应该也可以啊。
      

  3.   

    让程序sleep和循环一段时间再返回 ?
    这是自欺欺人的做法
      

  4.   

    我是指聊天程序要检查是否有新消息,如果不断发出ajax请求比较低效,于是有人让程序不马上应答,而是保持链接让程序循环一段时间,期间有新消息就马上返回。那请问如果用 “将session 的工作方式由默认的文件方式改为数据库方式”这个方案的话具体该怎么做?请问有没有详细些的教程?
      

  5.   

    除非你使用 websock,否则都没有所谓的“效率”
    不过目前只有支持 HTML5 的浏览器才可能支持 websock 客户端
    至今为止,php 还不能支持 websock 服务