摘 要
即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。随着互联网的发展,即时通讯的运用将日益广泛,即时通讯软件业方兴未艾。本文首先描述了即时通讯业的发展和现状,然后初步探讨了即时通讯所涉及到的一些技术,最后对现有的技术进行了对比和分析,提出了一些可能的改进方案,并且设计了一个名为web-msn的即时通讯系统。
web-msn是基于B/S的模式的即时通讯系统,通过IE等浏览器直接完成客户端的登录、数据传输,更加便捷了用户之间的通讯和交友;使用最新的Ajax技术,使其非常快,无需等待页面的刷新,实现了即时通讯的功能。
在系统设计与建模过程中,使用了UML和面向对象的分析、设计方法,本系统基于.NET Framework 1.1,使用Visual Studio .NET 2003作为开发工具,将.NET中的一些新技术运用到了系统中;在开发过程中用到了时下流行的重构开发方法,优化了系统的设计。
**关键词:**Web-msn;即时通讯;B/S; Ajax
2.5 开发环境
2.5.1 vs2003开发环境介绍
Visual Studio是微软公司出品的一款大型应用软件,是一套完整的开发工具集,它主要用于生成ASP.NET Web应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C++、Visual C# 和Visual J# 全都使用相同的集成开发环境(IDE)。利用此IDE可以共享工具且有助于创建混合语言解决方案,使程序可以使用不同的语言共同开发。NET开发平台由一组用于建立Web服务应用程序和Windows桌面应用程序的软件组件构成,包括.NET框架(Framework)、.NET开发工具和ASP.NET。Visual Studio 2003的集成开发环境中为开发人员提供了大量的实用工具以提高工作效率。这些工具包括了自动编译、项目创建向导、创建部署工程等。
2.5.2 Sql Server 2000介绍
SQL Server2000由一系列相互协作的组件构成,能满足最大的Web站点和企业数据处理系统存储和分析数据的需要。SQLServer构架各种组件通过何种方式发挥合力,更富成效地管理数据。
SQL Server2000数据库引擎提供完整的XML支持。它还具有构成最大的Web站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQL Server2000程序设计模型与WindowsDNA构架集成,用以开发Web应用程序,并且SQL Server2000支持EnglishQuery和 Microsoft搜索服务等功能,在Web应用程序中包含了用户友好的查询和强大的搜索功能。
2.5.3 C#语言介绍
C#是一种语言,它是专门为了微软的.NET战略而设计的一种语言. C#也叫C#.Net。
2.6 关键技术-Ajax简介
Ajax 是异步JavaScript和XML(Asynchronous JavaScript and XML)的英文缩写。"Ajax"这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google。Google发布的Gmail,Google Suggest等应用最终让人们了解了什么是Ajax。
Ajax的核心理念在于使用XMLHttpRequest对象发送异步请求,最初为XMLHttpRequest对象提供浏览器支持的微软公司。早在1998年,微软公司开发Web版Outlook时,就已经以ActiveX控件的方式为XMLHttpRequest提供了支持。Ajax是使用客户端脚本与Web服务器交换数据的Web应用开发方法。这样,Web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。
实际上,Ajax不是一种技术,而是几种技术。每种技术都具有独特之处,合在一起就形成了一个功能强大的新技术。Ajax包括:
-
XHTML和CSS;
-
使用文档对象模型进行动态显示和交互;
-
使用XML和XSLT进行数据交互和操作;
-
使用XMLHttpRequest进行异步数据接收;
-
使用JavaScript将它们绑定在一起。
5.1发送消息功能实现
为了实现发送消息的功能,在服务器端代码中需要定义Ajax方法SendMessage,具体代码如下:
|---|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| |
| | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [AjaxMethod()] public void SendMessage(string strUsername, string strContent) { // 数据连接 SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]); // SQL命令 SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = string.Format("SendMessage '{0}','{1}', '{2}'", User.Identity.Name, strUsername, strContent); try { // 打开数据连接 conn.Open(); // 执行SQL,发送消息 cmd.ExecuteNonQuery(); } catch (SqlException) { } finally { // 关闭连接 conn.Close(); } | |
然后在客户端编写getMessage函数,调用服务器Ajax方法进行消息的发送。
getMessage函数的代码如下:
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| // 发送消息 function sendMessage() { // 消息内容输入框 var ta_content = el("content"); // 如果输入内容不为空 if (ta_content.value.length > 0) { // 消息显示区域 var div_recentMsg = el("recentMsg"); // 用户名 var username = document.location.search.split('=')[1]; // 发送消息 ch111.SendMsg.SendMessage(username, ta_content.value); // 清空输入框 ta_content.value = ""; // 页面跟随输入框滚动 ta_content.scrollIntoView(false); // 获取新消息 getNewMessage(); } |
5.2 接收消息功能实现
为了实现接收消息的功能,在服务器端代码中需要定义Ajax方法GetNewMessage,具体代码如下:
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [AjaxMethod()] public DataSet GetNewMessage() { // 返回的数据集 DataSet ds = new DataSet(); // 数据连接 SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]); // SQL命令 SqlCommand cmd = conn.CreateCommand(); // 数据适配器 SqlDataAdapter da = new SqlDataAdapter(cmd); try { // 向DataSet中填充消息数据 da.Fill(ds); | |
|-----------------------------------------------------------------------------------------------------------------|
| try { // 向DataSet中填充消息数据 da.Fill(ds); } catch (SqlException) { } finally { // 关闭连接 conn.Close(); } return ds; } |
然后在客户端编写getNewMessage函数,调用服务器Ajax方法进行消息的发送。getNewMessage函数的代码如下:
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | function getNewMessage() { // 用户名 var username = document.location.search.split('=')[1]; // 消息显示区域 var div_recentMsg = el("recentMsg"); // 获取最新消息的数据表 var dt = ch111.SendMsg.GetNewMessage().value.Tables[0]; for (var i = 0;i < dt.Rows.length;i++) { // 一条消息对应与一个<span>对象 var oneMsg = document.createElement("span"); // 消息发送者与发送对象 var strLine1 = dt.Rows[i].sender + "说: (" + dt.Rows[i].sendtime + ")"; strLine1 = DealBrackets(strLine1); // 消息内容 var strLine2 = dt.Rows[i].content; strLine2 = DealBrackets(strLine2); // 显示样式 oneMsg.innerHTML = "<pre>" + strLine1 + "<br> " + strLine2 + "</pre>"; | |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | oneMsg.style.padding = "2px 2px 2px 2px"; oneMsg.style.color = (dt.Rows[i].sender == username) ? "blue" : "red"; oneMsg.style.fontFamily = "'Courier New' , 宋体"; // 附加到DOM div_recentMsg.appendChild(oneMsg); } } // 主进程循环 function mainLoop() { // 获取新消息 getNewMessage(); // 每隔1秒检查一次 setTimeout("mainLoop()", 1000); } // 显示最近的消息 getRecentMsg(); // 定时更新消息列表 mainLoop(); | |
结 论
本次对即时通讯的课题研究涉及到了即时通讯协议的定制;即时通讯服务模式的探讨; web-msn系统建模、设计到实现的一系列过程,重点讲叙了Ajax 新技术的使用等知识,也介绍了相关的社会科学理论以及与即时通讯软件的紧密结合,纵观即时通讯事业的壮大和发展,即时通讯的服务功能将会越来越丰富和完善,并必将更加深入地渗透到我们的日常生活中来,及时的研究即时通讯技术,无论是对我们的研究还是生活,都将带来相当大的影响。