当前位置: 技术问答>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里就可以了。
我可以帮助你,在iframe里的src指向一个定时刷新的页面。如果你的OA系统使用frame的话,把这个iframe放在某个不会关闭的frame里就可以了。
|
把消息发到server端
1)在页面中用一个iframe定时刷新
2)或用JavaScript定时用XMLHTTP去拿数据
1)在页面中用一个iframe定时刷新
2)或用JavaScript定时用XMLHTTP去拿数据
|
http://expert.csdn.net/Expert/topic/1182/1182351.xml?temp=.3558466
|
然后在页面中用一个iframe定时刷新的jsp,去数据库提取数据
|
呵,这么担心数据库,找人测试一下啊.
|
应该没有什么问题,
www.dev-club.com 在线发信息就是用这个原理,速度还是挺快的
www.dev-club.com 在线发信息就是用这个原理,速度还是挺快的
|
up
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。