我还不知道用php怎样做聊天室
没有像asp中的applicaton怎么存储聊天记录?

解决方案 »

  1.   

    我没做过,不过我的想法是:聊天记录存在数据库中,table:chatroom 字段:id(自动增长),from(发话者),to(接收者),secrecy(是否为密语),motion(表情代号),……status(是否已发出default 0)
    进入聊天的页面要删除chatroom中一些纪录,使之保持最后n条纪录(比如20条,是聊天室的可见语句,也起保密作用).
      内嵌一小到不可见的页面,不断刷新,发现status=0的纪录,则刷新聊天页面。
      聊天页面:update chatroom set status=1 where status=0; 
                select * from chatroom order by id desc limit 20 ;
               while(……)
                echo   这样的效果是:不用set_time_limit,也不用固定时间refresh聊天页面,只要有人说话才刷屏,好像在web push一样,呵呵。
       
       这是我自己想的,事实上我没有实践过,网上那么多聊天室现成代码,我懒得自己编了,罪过罪过…… 不知想法正确否,摆出来讨论一下。            
      

  2.   

    这么做的话,只有第一个见到新聊天信息的人能看到它,其它人会发现屏幕上没有任何消息。
    要注意在同一聊天室里有很多的人,不是一个人。
    如果把比较 status 字段是否为 0 的条件改为比较消息发送时间比较好:
    每次刷新页面时记录最后一条接收到的消息的发送时间 (记录在 COOKIE 或 SESSION 中),下次刷新时就取得所有时间在这个时间之后的所有消息,这样每个聊天者就都能看到所有的消息了。
      

  3.   

    to : shos(和月 修) 
    注意::进入聊天的页面要删除chatroom中一些纪录,使之保持最后n条纪录(比如20条,是聊天室的可见语句,也起保密作用).
       在聊天页面中,第二个用户进来后,看到了最后20条,第三个进来后,看到了新的最后二十条,跟前面的人是一样的
        你怎么会说什么都看不见呢?这样吧,我就实践一下编出来大家看看吧,希望很快搞定,界面就不考虑了
      

  4.   

    shos(和月 修) ,U r right,
    不过不是在进入页面看不见,而是……
    是我没想全,不好意思。我用session实现了,基本上能用,功能不强。关键步骤:
    进入页面后session_register当前时间
    发言在数据库中记录发言时间
    内嵌小页面刷新,用session中当前时间与数据库中发言时间比较判断是否有新的发言,如有则刷新聊天页面,并session_register新的当前时间,如无则不做操作。
    聊天页面取最后几条聊天纪录。完毕
      

  5.   

    只指出几点缺点:
    页面上:会出现滴答的声音,会出现不停的reload该页面功能上:速度不行,聊天室要有很强的实时显示能力,解决方法:用activex控件,聊天内容保存在服务器端的一个全局变量中(最好在内存中)soap+xml可以解决页面上的问题,在asp中可以用application作为一个全局变量(速度有保证)