一个在线聊天功能,不使用Actionx插件,采用定时刷服务器内存的方式,不刷数据库。
思路是这样的,所有发送到服务器的信息都缓存到内存中,别人读时也是从内存读数据,达到一定数量后存到数据库中(或者其他处理方式)。服务器端定义两个静态链表,一个存储用户结构(UserList),一个存储聊天结构(ChatList)。
用户登录后在UserList中加入一个节点,用户Session超时后(或者用户主动注销),在Session_End事件中,移除对应的节点(根据Session(UserID),不知道这时候Session中的UserID清空了没),维护链表的移除操作。聊天时在ChatList中加入一个节点,页面用ajax方式,在服务器上通过ChatId找到对应的聊天结构,然后通过索引找到内容。(详细的处理可以再细化)我的感觉,整个web应用程序维护好这两个链表,基本就可以了。
大体的思路是这样的,不知道合理不合理,希望大家指正,谢谢。整个思路里,担心的是Session_End事件,能不能正确触发,Session里面的UserID是不是清掉了。原本的打算是开一个线程维护这两个链表的,后来发现还有Session_End事件,线程就省了(一直没做过web开发,做B/S的,同学接了个项目练练手)。
Google时很多地方说简单的web聊天xxx,我这里不会把简单的问题复杂化了吧。
思路是这样的,所有发送到服务器的信息都缓存到内存中,别人读时也是从内存读数据,达到一定数量后存到数据库中(或者其他处理方式)。服务器端定义两个静态链表,一个存储用户结构(UserList),一个存储聊天结构(ChatList)。
用户登录后在UserList中加入一个节点,用户Session超时后(或者用户主动注销),在Session_End事件中,移除对应的节点(根据Session(UserID),不知道这时候Session中的UserID清空了没),维护链表的移除操作。聊天时在ChatList中加入一个节点,页面用ajax方式,在服务器上通过ChatId找到对应的聊天结构,然后通过索引找到内容。(详细的处理可以再细化)我的感觉,整个web应用程序维护好这两个链表,基本就可以了。
大体的思路是这样的,不知道合理不合理,希望大家指正,谢谢。整个思路里,担心的是Session_End事件,能不能正确触发,Session里面的UserID是不是清掉了。原本的打算是开一个线程维护这两个链表的,后来发现还有Session_End事件,线程就省了(一直没做过web开发,做B/S的,同学接了个项目练练手)。
Google时很多地方说简单的web聊天xxx,我这里不会把简单的问题复杂化了吧。
不过我有个新问题,楼上的麻烦请教下,是用Socket来做吗?不是的话那么多人聊天,一直在判断请求,如何缓解服务器负担
资料
看看牛人们写的
web程序是无状态的,只能等Session过期
Session退出时实现人数统计不准确。非法关机或关闭IE不会执行
要记录用户日志和操作时间,再用定时器刷新计算用户
已经有固定时间没有活动的用户,然后删除
内容保存,内存开辟两个静态链表。
session我还不是很熟呀,要找找资料了。
"非法关机或关闭IE不会执行",是不是session_End就不触发了
也不想网上找代码改来改去的,打算自己实现。
怎么解释,难道说asp_net会随时收回session么,或者asp_net随时可能当掉么(这个不会把),服务器频繁重启!。
不理解
定时发送心跳包- 如果有发给此用户的信息,取回
如果长时间没心跳,或者登出 session end 清理资源