什么是application

Application对象是HttpApplicationState类的一个实例,用于定义ASPNET应用程序中的所有应用程序对象所有的方法、属性和事件。

HttpApplicationState类是由用户在gobal.asax文件中定义的应用程序的基类。此类的实例Application对象是在ASPNET基础结构中创建的,而不是由用户直接创建的。一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。这样,成员变量才可用于存储针对每个请求的数据。

Application的原理是在服务器端建立一个状态变量,用来存储所需的信息。需要注意的是,首先,这个状态变量是建立在内存中的,其次这个状态变量是可以被网站的所有页面访问的。

Application具有以下特点:

  • 数据可以在Application对象内部共享。
  • 一个Application 对象包含事件,可以触发某 些Applicatin对象脚本。
  • 个别Application对象可以利用Internet Service Manager来设置,从而获得不同的属性。单独的Application对象可以隔离出来在它们自己的内存中运行。
  • 可以停止一个Application对象(将其所有组件从内存中驱除)而不会影响到其他应用程序。
  • 个网站可以有不止一个Application对象。典型情况下,可以针对个别任务的一些文件创建个别的Application对象,例如,可以建立一个Application对象来适用于全部公有用户,而再创建另外一个只适用于网络管理员的Application对象。
  • Application 对象成员在服务器运行期间持久地保存数据。Application 对象成员的生命周期止于关闭IIS或使用Clear方法清除。
  • 因为多个用户可以共享一个Application对象,所以必须要有Lock和Unlock方法,以确保多个用户无法同时改变某一属性。

什么是session

在ASP.NET中Session对象是HttpSessionState的一个实例。该类为当前用户会话提供信息,还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。

可以使用Session对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当会话过期或被放弃后,服务器将中止该会话。

利用Session进行状态管理是一个ASP.NET的显著特点。它允许程序员把任何类型的数据存储在服务器上。数据信息是受到保护的,因为它是永远不会传送给客户端,它捆绑到一个特定的Session。每一个向应用程序发出请求的客户端则有不同的Session和一个独特的信息集合来管理。(当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象) Session 是理想的信息存储器,比如当用户从一个页面跳转另一个页面时,可以在它里面存储购物篮的内容。

通过以上比较可以发现,如果想要做聊天室,application是再合适不过的,可以被多用户访问,由于session只能被自己访问,用来做购物车是比较适合的,内置对象选取完毕,下面开始设计。

思路

需要一个登录页面,用户输入用户名进行登录,加入聊天室,同时向application中加入自己的信息,这样别人才能访问,登录之前需要检查一下用户名是否冲突,冲突之后禁止登录,聊天界面用户需要刷新聊天信息,可以使用Ajax技术请求进行刷新,或者使用WebSocket,还可以使用H5中的iframe标签进行刷新。这里我选用的是iframe标签进行刷新,简单快捷只需要在需要刷新的页面加一个meta标签就能实现刷新效果。存储用户聊天信息方面,使用Application保存用户聊天信息,用户没每一句话就添加一个application,遍历application获取到值,把键当作用户名,把值当作用户里聊天内容,这样,当然,保存信息的方式多种多样,这里的方法比较笨拙。

实现

登录页面:登陆页面很简单,只需要一个简单的TextBox控件和一个Button控件即可。
Index.aspx代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>请登录</title><link href="CSS/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body><form id="form1" runat="server"><div><asp:Label ID="lbTitle" runat="server" Text=""></asp:Label><br /><!--用于提示消息--><asp:Label ID="Label1" runat="server" Text="请输入用户名:"></asp:Label><asp:TextBox ID="txtUsrname" runat="server"></asp:TextBox><asp:Button ID="btnLogin"runat="server" class="btn btn-default" Text="登陆" OnClick="btnLogin_Click" /></div></form>
</body>
</html>

Index.aspx.cs登陆页面后台代码:登陆之前遍历以下看是否用户名冲突,冲突之后禁止登录并且提示用户。

    public partial class Index : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnLogin_Click(object sender, EventArgs e){string username = txtUsrname.Text.Trim();//获取用户输入的用户名for (int i = 0; i < Application.Count; i++)//遍历所有的application{if (Application.GetKey(i).ToString().Equals(username))//如果用户名冲突{lbTitle.Text = "该用户已经登陆"; return;//提示用户名冲突并返回}}Application.Add(username, "我上线啦!");//如果用户名不冲突就添加application信息Response.Redirect("Chat.aspx?username=" + username);//url传值小项目不考虑安全了(doge)}}

主界面:聊天界面,聊天界面需要的东西不多,只需要一个Label显示当前用户,一个TextBox控件用于输入,一个Button控件用于发送输入的信息,其中最重要的是得有一个iframe标签用来放刷新消息的页面页面。
Chat.aspx页面代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><link href="CSS/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body><div class="container"><form id="form1" runat="server"><div class="row"><div class="col-xs-10"><iframe src="_roomcontent.aspx" class="col-xs-10" width="" height="500"></iframe></div></div><div class="row"><div class="col-xs-2"><asp:Label ID="lbUsrname" runat="server" Text="tom"></asp:Label></div><div class="col-xs-5"><asp:TextBox ID="txtSendtxt" class="form-control" runat="server"></asp:TextBox></div><div class="col-xs-2"><asp:Button ID="btnSend" class="btn btn-default" runat="server" Text="发送" OnClick="btnSend_Click" /></div></div></form></div>
</body>
</html>

其中,iframe这个标签内包裹的就是被刷新的页面,也就是要存放动态消息的页面。

Chat.aspx.cs后台代码如下:

    public partial class Chat : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack)if (Application.Count <= 0) Response.Redirect("Index.aspx");//没有用户就跳转到登陆届界面string username=Request.QueryString["username"].ToString();//接受get请求发送来的值lbUsrname.Text = username;//设置用户名}protected void btnSend_Click(object sender, EventArgs e){string sendstr = txtSendtxt.Text.Trim();Application.Add(lbUsrname.Text, sendstr);//保存聊天信息txtSendtxt.Text = "";//发送消息之后把输入框清空}}

需要刷新消息的界面:只需要让这个界面刷新就行,所以需要在建立一个界面用来刷新信息,需要在meta标签里面添加一个content属性,值等于3,这个值可以随意设置,3就是3秒刷新一次,1就是1秒刷新一次,根据自己需要进行设置,为了显示多行信息需要将TextBox控件的属性改一下,设置成多行,否则只能看到一行消息。
_roomcontent.aspx页面代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><meta http-equiv="refresh" content="3"><link href="CSS/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body><form id="form1" runat="server"><div class="container"><div class="row"><div class="col-xs-3"><asp:Label ID="Label1" runat="server" Text="简单的在线聊天室"></asp:Label></div><div class="col-xs-3"><asp:Label ID="lbPerSount" runat="server" Text="当前在线人数"></asp:Label></div></div><div class="row"><div class="col-xs-4"><asp:TextBox ID="txtMessage" runat="server" Height="400" TextMode="MultiLine" Width="600"></asp:TextBox></div></div></div></form>
</body>
</html>

_roomcontent.aspx页面:每次页面加载的时候遍历信息,将信息添加到TextBox里面就行,然后统计人数是将键合并,就是在线人数。
_roomcontent.aspx.cs代码如下:

    public partial class _roomcontent : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){string message = "";for (int i = 0; i < Application.Count; i++)message += Application.GetKey(i) + "说:" + Application[i] + "\n";txtMessage.Text = message; List<string> allusrlist = Application.AllKeys.ToList();lbPerSount.Text ="当前在线人数:"+ allusrlist.Distinct().Count().ToString();}}

这样,一个简单的在线聊天室就完成啦,试试效果,打开两个界面,用来演示效果。

先登陆一个小红试试

然后再登陆一个小明

聊天测试

结语

效果还行,欢迎留言,收藏,转发

ASPNET使用Application实现在线聊天室相关推荐

  1. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...

  2. 云信小课堂|搭建应用级别在线聊天室,7步就够了!

    Vol. 6 从2000年至今,聊天室一直活跃在人们的各种生活场景中,目前广泛运用于超级小班课.互动大班课.连麦开黑.主播 PK 等场景,还具备文本.表情.点赞.撒花等互动方式,架起沟通桥梁的同时,玩 ...

  3. 基于Java语言的Web在线聊天室

    在线聊天室 能够实现登录,注册,聊天功能,最终效果如下图所示 注册页面 <%@ page language="java" contentType="text/htm ...

  4. 在线聊天室(B/S、servlet、websocket、JDBC)

    在线聊天室 一.项目简介 后端技术 项目需求 数据库设计 项目结构 二.项目具体实现 1.前后端交互数据 前端 后端 2.数据库连接(JDBC) 3.不同频道群聊模块 websocket介绍 具体实现 ...

  5. 实战|使用 Python 开发一个在线聊天室

    「来源: |Python爬虫与数据挖掘 ID:crawler_python」 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 云想衣裳花想容,春风拂槛露 ...

  6. 实战 | 使用 Python 开发一个在线聊天室

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 云想衣裳花想容,春风拂槛露华浓. ...

  7. php+websocket实现在线聊天室(一)

    聊天室最终实现版:https://www.sinight.site/chatroom 可以自己多开几个窗口体验 前言:WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的 ...

  8. SpringBoot与webSocket实现在线聊天室——实现私聊+群聊+聊天记录保存

    SpringBoot与webSocket实现在线聊天室--实现私聊+群聊+聊天记录保存 引用参考:原文章地址:https://blog.csdn.net/qq_41463655/article/det ...

  9. Java+Springboot+Websocket在线聊天室

    1.什么是websocket? websocket是由HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯.它是一种在单个TCP连接上进行全双工通信的协议.W ...

最新文章

  1. 「镁客·请讲」快仓杨威:赋予仓库灵魂,让智能仓库系统自我进化和迭代
  2. 写一个实时监控IP连通性的小脚本
  3. Keywords: Flash( Scaleform ) UI
  4. Alpine 操作系统是一个面向安全的轻型 Linux 发行版
  5. 如何查看及修改Oracle的字符编码
  6. 标准C程序设计七---66
  7. Mysql执行计划的extra列及filesort祥析
  8. Java Bean + 注册验证
  9. 学好JAVA保终身_JAVA IO 学习
  10. 数据结构十大经典排序算法--Python
  11. [笔试面试题] 10-C和C++区别相关
  12. MOSS 中的计算公式
  13. 利用OpenCV处理图片-马赛克效果
  14. 适合程序员学习的国外网站推荐
  15. Mono.Cecil 修改目标.NET的IL代码保存时报异常的处理。
  16. List在遍历时修改元素会怎样?——学习笔记
  17. 排序:ORDER BY
  18. Mac上面有哪些宝藏的软件
  19. 计算机用户密码无法输入,电脑数字密码输入不了怎么办
  20. 最佳回归模型选择指标——马洛斯CP值

热门文章

  1. Apache Commons 系列简介 之 CLI
  2. 天载配资期权操作策略:以高抛低吸为主
  3. “十四五”信通行业发展规划:2025年区块链设施服务能力将显著增强 | 产业区块链发展周报...
  4. 【SEUSE】操作系统实验:消费者-生产者问题
  5. ALV GRID类型
  6. Load/Reload CMake - Reload CMake Project
  7. 艾媒报告|2018-2019中国智慧物流行业研究报告
  8. 4月书讯!15本新书闭眼入!
  9. 中软国际携手深开鸿发布(1+1) x N 战略,以数字化、智慧化改变人类生产和生活方式
  10. Cocos2d-x3.0游戏实例《别救我》目录导航(共10篇,已完结)