分享好友 最新动态首页 最新动态分类 切换频道
html网页多人聊天,html5+js+.Net的即时多人聊天
2024-12-20 09:01

今天看了下websocket的知识,了解到这是html5新增的特性,主要用于实时web的通信。之前客户端获取服务端的数据,是通过客户端发出请求,服务端进行响应的模式,或者通过ajax每隔一段时间从后台发出请求,然后更新页面的信息,这种轮询的方式使得用户感觉页面是“实时响应”的,这样做虽然简单但未免有些暴力,另外每次请求都会有TCP三次握手并且附带了http头信息,服务器表示压力很大,这就造成了性能上和延迟的问题。

后来的技术方案中又出现了长轮询、Comet、浏览器插件(flash)和Java等来实现服务器往客户端推送消息,但都有一些弊端。

WebSocket的出现,意味着另一种解决方案,其提供了基于TCP的双向的、全双工(发送数据的同时也能够接受数据,两者同步进行)的socket连接。使用websocket,一旦服务端和客户端之间完成握手,信息就可以随意往来两端,而不用附件那些无用的http头信息,降低了带宽的占用,提高了性能,降低了延时。但其缺陷是浏览器的支持不够,比如IE,到了IE10才支持。

现在就通过一个简单的例子来讲讲其运用过程,先上下效果图

项目的环境:.NET 4.5 +MVC 4 +JQuery+HTML5+VS2013+IE11

核心的实现过程,分以下几步

1、websocket的创建、发送消息、接受消息、关闭

2、服务端的响应

下面针对上面的步骤,具体讲解下

1、websocket的创建、发送消息、接受消息、关闭

websocket里包含的几个重要事件如下图: onopen onmessage onerror onclose;

websocket的创建: 这时连接会发送到服务端后台代码,进行客户端和服务端的握手,如果握手成功,则会触发onopen事件,表示连接建立;如果连接失败,就会执行onerror事件,随后执行onclose事件。当客户端获取到服务端推送的消息后,就会执行onmessage事件。

try{if ("WebSocket" in window) { //判断浏览器是否支持WebSocket

socket = new WebSocket("ws://localhost:13458/Socket/SocketHandler.ashx"); //socket连接服务端地址

}

}catch(ex)

{

log("您的浏览器不支持WebSocket,请切换到更高版本 或用chrome firefox");return;

}//相应的socket事件

//socket建立连接

socket.onopen = function() {//连接成功,将消息广播出去

isSocketConnect = true;

$("#btnWs").val("断开");

sendSocketMessage(Event,"进入聊天室");

}//socket得到服务端广播的消息

socket.onmessage = function(event) {

Log(event.data);

}//socket连接关闭

socket.onclose = function() {

Log("socket closed!");

}//socket连接出现错误

socket.onerror = function(event) {

Log("socket connect error");

}

当然客户端也可以往服务端发送消息,发送事件便是socket.send(data);data代表发送给服务端的数据:具体代码如下

if (socket.readyState ==WebSocket.OPEN) {if ($("#txtMsg").val() == "") {if (!msg) {return; //空文本不发送消息

}

}//如果未输入用户名,根据当前时间生成游客昵称

if ($("#userName").val() == "") {var d = newDate();

$("#userName").val("游客" + d.getMinutes() + "_" + d.getSeconds() + "_" +d.getMilliseconds());

}if (!msg) {

msg= "" + $("#userName").val() + "" + "

";

}else{

msg= "" + $("#userName").val() + " " +msg;

}

socket.send(msg);

$("#txtMsg").val(""); //清空已输入的数据

$("#txtMsg").focus();

}

2、服务端的响应

这里我们添加一般处理程序来进行响应和推送客户端消息,其中有一点要处理的是 我们要实现即时多人聊天,就要把客户端发过来的消息广播到其他客户端,这里实现原理也很简单,就是把所有的连接用list存起来,然后遍历list集合,将消息发送给各个客户端。具体实现代码如下

public classSocketHandler : IHttpHandler

{//用来存储当前所有连接的客户单

public static ListWebSocketList;public voidProcessRequest(HttpContext context)

{if (WebSocketList == null)

{

WebSocketList= new List();

}

HttpContext.Current.AcceptWebSocketRequest(async (contexts) =>{

WebSocket socket=contexts.WebSocket;while (true)

{

ArraySegment buffer = new ArraySegment(new byte[1024]);

CancellationToken token;

WebSocketReceiveResult result= awaitsocket.ReceiveAsync(buffer, token);//获取客户端发过来的消息

string clientMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);if (socket.State ==WebSocketState.Open)

{//重新组织消息,发送给客户端

clientMessage = DateTime.Now.ToString() + " " +clientMessage;

buffer= new ArraySegment(Encoding.UTF8.GetBytes(clientMessage));//如果该客户端为初次加入,添加到用户列表;

if (!WebSocketList.Contains(socket))

{

WebSocketList.Add(socket);

}//将消息进行广播

foreach (WebSocket item inWebSocketList)

{await item.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

}

}if (socket.State ==WebSocketState.CloseReceived)

{//客户断开的时候,要从列表中移除

WebSocketList.Remove(socket);

}

}

});

}

ps:离职了,找工作中……广州/深圳  围观简历

最新文章
快速建站新体验轻松打造专业网站助你成就在线梦想
在这个数字化的时代,拥有一个专业的网站已成为每个人、每个企业的必备工具。无论你是创业者、自由职业者,还是希望展示个人作品的艺术家,网站都是你在线展示自我的最佳平台。传统的建站过程往往复杂而繁琐,需要专业的技术知识和大量的时
短营销攻略,打造品牌崛起新引擎
本方案针对短推广,通过精准定位目标受众、创意内容制作、优化发布时间及平台策略,全方位提升品牌影响力。借助数据分析与效果监控,实现品牌快速崛起,助力企业抢占市场先机。随着移动互联网的快速发展,短已成为当下最受欢迎的传播方式之
网站优化排名推荐,最好的SEO排名优化工具?
关于“网站优化排名”的问题,小编就整理了【6】个相关介绍“网站优化排名”的解答:最好的SEO排名优化工具?1、百度站长工具2、第三方站长免费工具3、百度指数4、百度统计5、17ce是国内专业做网站测速的第三方平台6、5118数据分析平台。7
SEO优化什么意思及最佳实践分享
SEO优化什么意思及最佳实践分享在数字营销的快速发展中,SEO(搜索引擎优化)成为了提升网站可见性和吸引目标受众的重要手段。通过优化网站结构、内容和外部链接,企业能够在搜索引擎中获得更高的排名,从而带来更多的流量和潜在客户。本文
金华企业网站在线曝光新引擎,排名优化与推广助力腾飞
金华网站排名优化推广,专业提升在线曝光度,助力企业迅速扩大市场影响力,实现业务腾飞。通过精准策略,优化搜索引擎排名,让企业品牌快速触达目标客户,抢占市场先机。2. **吸引潜在客户**:优化后的网站排名能够吸引更多潜在客户,为企
重庆学护理的专科学校排名,附护理专业专科学校排名
今天高校招生网小编整理了重庆学护理的专科学校排名 重庆市内的有医学类的专科学校有哪些呀?,希望在这方面能够更好的帮助到考生及家长。 重庆专科学校排名前十如下:1、重庆电子工程职业学院:全国排名第12名重庆电子工程职业学院(Chongq
麻将来了怎么快速提升个人排名?
麻将来了是一款非常受欢迎的麻将游戏,许多玩家都希望快速提升自己的排名。以下是一些实用的建议,可以帮助你在麻将来了中快速提升个人排名:一、了解在任何游戏中,了解规则都是成功的关键。麻将来了也不例外。熟悉,包括各种麻将牌型的含
西城区企业专属品牌形象定制方案,助力企业飞跃发展
西城区定制方案旨在为企打造独特品牌形象,提供专业网站服务,助力企业实现品牌升级与业务腾飞。西城区定制方案的优势1、量身定制:根据企业独有的特点、行业属性以及用户的具体需求,打造独一无二的专属网站,充分展现企业特色。2、技术领
获取token官网地址@@ -518,6 +518,7 @@+++++{axios- .post("http://20.165.225.104:8081/api/loginToken?token
++++{ axios-.post("http://20.165.225.104:8081/api/loginToken?token=" + token)+.post("/api/loginToken?token=" + token) .then((response) => { if (response.data.code == 0) { console.error(response.data.data);@@ -743,9 +762,12
百度网站排名算法_百度网站排名算法是什么
百度网站排名算法_百度网站排名算法是什么大家好,我很乐意和大家探讨百度网站排名算法的相关问题。这个问题集合涵盖了百度网站排名算法的各个方面,我会尽力回答您的疑问,并为您带来一些有价值的信息。文章目录列表:1.2016百度SEO_新算法
相关文章
推荐文章
发表评论
0评