对《ASP.NET 入门经典》11.2节聊天室改进的想法

关键字:《ASP.NET 1.1 入门经典》 Application Session 聊天室 Web游戏 DEBUG

章节:11.2


书上聊天室是用Application保存聊天信息,存储信息的对象(或者叫变量)就是String,包括发言者的姓名、内容。

有以下缺陷:

  • 聊天记录全部存储在服务器端,占服务器资源,最好不要保留太多的聊天记录。
  • 数据结构非常混乱,发言人信息、内容都交织在一起。
  • 没有自动更新功能,只有发言提交,或者手动刷新才能看到新的聊天记录。
  • 比较严重的问题:每一个发言者都可以清空服务器上的聊天记录。

改进:

  • 聊天记录采用Session和Application结合的方法存储,Application存储一部分聊天记录(最新的),当某个用户登录后,将Application里的聊天记录复制到Session里。
  • 某用户发言,聊天记录进Application,更新这个用户的Session。
    Application的清理机制:
    1. 按存储量清理。设定一个值LogNum,最多存储多少条记录,超过这个值,丢掉最老的,腾出空间存放新的,先进先出。
    2. 按用户清理。保证每个用户都能看到所有的聊天记录。对每一条聊天记录设一个用户Session更新标志,当有用户发言,将其他所有用户更新都设未更新,并将该用户所有未更新的聊天记录发送到Session里,将这些记录的该用户更新标志设已更新。清理所有用户都更新了的聊天记录。

方法1的优点:简单、灵活,保存的聊天记录的多少可以通过设置LogNumt的大小来确定;缺点:如果LogNum设小了,有用户会丢失一些聊天记录。

方法2的优点:所有用户都可以看到所有的聊天记录。缺点:过程复杂,服务器开销太大,最坏的情况服务器要保存最大聊天记录数-1条聊天记录,还有更新标志的开销。可以对用户数量进行控制,用户长时间不发言超时限制,以减小服务器开销。

  • 聊天记录可以将发言人姓名、内容、时间等信息封装到一个类里,再将这个类装到一个队列。
  • 将聊天页面用框架分开,发言部分为一个页面,聊天记录为一个页面,聊天记录页面设自动更新,可以缓解Application清理机制2的服务器开销问题。
  • 还可以添加一些其他功能:
    各个用户选择自己发言文字的颜色、字体、大小,甚至可以选择自己的头像
    一对一、或者一对多(多对多)的私聊

应用:再加上一些规则,可以做类似杀人游戏的Web游戏。

DEBUG:
在照书上做例子的时候,代码输完了,但是点提交就是没有反应,聊天记录文本框里没有内容,聊天消息输入框里的内容也没有清空,将下载下来的原码试验,正常。对比C#程序,完全一致。后来对比HTML时,发现提交按钮的“onclick”被打成了“onclice”,造成了没有点击事件,所以程序完全没有反应。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值