当前位置:  技术问答>java相关

簡單問題,100分送上.

    来源: 互联网  发布时间:2017-04-30

    本文导语:  在OA系統里面,在線用戶之間互相發短信息.當有新的短消息送到的時候會彈出一個窗口提示.請問如何實現? |    用ASP,PHP,JSP等来实现在线人员名单的显示的实现原理     很多网友都问如何制作...

在OA系統里面,在線用戶之間互相發短信息.當有新的短消息送到的時候會彈出一個窗口提示.請問如何實現?

|

   用ASP,PHP,JSP等来实现在线人员名单的显示的实现原理  

  很多网友都问如何制作社区的在线人员显示问题,这也是个老大难的问题。由于笔者已经学习和实践了这些方面的编程已经有很长一段时间了。不说是有技术,也算是有些经验了,在这些问题解决方面我也曾遇到比较多的问题,后来总是解决了。
  这次和大家讲的不关是一个程序的代码实现,而更重要的就是一个原理和思想问题,因为如何大家都知道这个该如何去做的话,就不存在技术上的难题了,而只是一个语法上的不熟罢了。
  其实判断用户是否登录很简单,只要在登录的程序加上 "把用户设为在线" 就行了,这可以用SQL的update来做也可以用其他的如对文本文件的追加来做。如何登录时是设置的可以COOIKE登录的话,你只要在浏览页面或是发表贴子等的页面,进行更新也可以。
  其实网友认为难的就在于如何知道用户已经离开社区了。下面有几个初学网友会犯的错误。
  错误方法一: 当然有的网友会做在社区里做个 "退出社区" 可有的用户比较忙或是手比较快,就会直接的关闭浏览器了。那么在程序看来此用户根本就没有退出社区。
  错误方法二: 为了这样也有的网友以关闭浏览器为标准,例如每当用户直接关闭浏览页面时,用JavaScript执行一个unload事件,跳出一个窗口,来执行相就在的更新,这也许是解决直接关闭的问题。可是网友没有考虑到如果因为贴子或文章太长,用户想断了线后,再好好的看看,那么他正好是直接断线后,看完所有贴子或文章再关闭浏览器的呢。此时跳出窗口页面的程序就等于没有执行。
  错误方法三:使用session为例,一般的服务器中都有Session的失效时间,如IIS中为20分钟,有的网友以Session为标准,来判断,这显然也是行不通的,结果会和错误方法二一样。
  那么如果才是正确的方法呢。到现在为此还没有一种方便的和精确的方法,除非你用Job事务来做,当那几乎是不可能的,因为免费的,即使是收费的主页空间也不会让你这么做的。所以只能能过普通的命令来实现了。 
不过它的局限性就在于不能精确,但是我们可以让他更加的接近于精确。
下面我们会以IIS环境下的SQL SERVER服务器为例子。其他的如PHP+MYSQL,JSP+MS SQL SERVER等举一反三,几乎语句都不用怎么变。
  例子中采用程序片段,例如用户在表users中,除了基本要有的用户名字段(name)等,要有online字段,可以用bit类型就可以了。还要有一个登录时间的字段logintime,和最后操作时间的字段logouttime,都为datetime类型。详细的作用我们会在后面谈到。
  首先在用户登录进入时,要生成一个Session("name")字段的值,或是cookies("club")("name")的值,以便于在进行操作时,让SQL在社区中任意页面都知道是哪个用户的记录。接着更新用户的下online字段和logintime字段,语句如下:
  conn.execute("Update users set online=1,logintime='"&now&"' where name='"&session("name")&"'")
  这条语句的作用在于当用户登录时,就把用户在线设为真,再把当前操作时间设为现在。其次在用户进行贴子或文章浏览时,也要用此语句,因为这样才可能更加的准确些。
在这些语句的后面再加上一句。
  conn.execute("Update users set online=0 where diffdate(""n"",logintime,'"&now()&"')>10") 
  这条语句的作用表示把用户最后操作时间和当前时间相比较,如果大于10分钟的话,就会把这些用户都设为离线。
  好了,其实关键的也就是这两条语句而以,是不是很简单?说了这么多,其实想让大家了解的就是实现的原理,而不是什么代码。相信大家现在也可以很简单的做出关于PHP+MYSQL和JSP+数据库的在线人员显示的程序来了。
  最后可以用"select name from users where online=1"来调用在线的用户了,然后显示出来当然也没问题了。呵。。。


|
朋友,你也作OA的吗?
我可以帮助你,在iframe里的src指向一个定时刷新的页面。如果你的OA系统使用frame的话,把这个iframe放在某个不会关闭的frame里就可以了。

|
把消息发到server端

1)在页面中用一个iframe定时刷新
2)或用JavaScript定时用XMLHTTP去拿数据

|
http://expert.csdn.net/Expert/topic/1182/1182351.xml?temp=.3558466

|
然后在页面中用一个iframe定时刷新的jsp,去数据库提取数据

|
呵,这么担心数据库,找人测试一下啊.

|
应该没有什么问题,

www.dev-club.com 在线发信息就是用这个原理,速度还是挺快的

|
up

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3