在线聊天室html5源码,HTML5WebSocket实现聊天室的代码示例

5268f80b9b1e01f982625ef6fac83ca1.png

本篇文章主要介绍了HTML5-WebSocket实现聊天室示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

在传统的网页实现聊天室的方法是通过每隔一段时间请求服务器获取相关聊天信息来实现,然而html5带来的websocket功能改变这了这种方式.由于websocket在连接服务器后允许保持连接来进行数据交互,因此服务器可以主动地向客户端发送相应的数据.对于html5的处理只需要在连接创建完成后在websocket的receive事件中处理接收的数据即可.下面通过实现一个聊天室来体验一下服务器可以主动地向客户端发的功能.

功能

一个简单的聊天室主要有以下几个功能:

1)注册

注册要处理几个事情,分别是注册完成后获取当前服务器所有用户列表,服务把当前注册成功的用户发送给其他在线的用户.

2)发信息

服务器把当前接收的消息发送给在线的其他用户

3)退出

服务器把断开的用户通知其他用户

聊天室完成的功能预览如下:

23fb670fbe544f7abca24bc0a6d3a36d.png

C#服务端代码

服务端的代码只需要针对几功能定义几个方法即可,分别是注册,获取其他用户和发送信息.具体代码如下:

///

/// Copyright © henryfan 2012

///Email: henryfan@msn.com

///HomePage: http://www.gxlcms.com/

///CreateTime: 2012/12/7 21:45:25

///

class Handler

{

public long Register(string name)

{

TcpChannel channel = MethodContext.Current.Channel;

Console.WriteLine("{0} register name:{1}", channel.EndPoint, name);

channel.Name = name;

JsonMessage msg = new JsonMessage();

User user = new User();

user.Name = name;

user.ID = channel.ClientID;

user.IP = channel.EndPoint.ToString();

channel.Tag = user;

msg.type = "register";

msg.data = user;

foreach (TcpChannel item in channel.Server.GetOnlines())

{

if (item != channel)

item.Send(msg);

}

return channel.ClientID;

}

public IList List()

{

TcpChannel channel = MethodContext.Current.Channel;

IList result = new List();

foreach (TcpChannel item in channel.Server.GetOnlines())

{

if (item != channel)

result.Add((User)item.Tag);

}

return result;

}

public void Say(string Content)

{

TcpChannel channel = MethodContext.Current.Channel;

JsonMessage msg = new JsonMessage();

SayText st = new SayText();

st.Name = channel.Name;

st.ID = channel.ClientID;

st.Date = DateTime.Now;

st.Content = Content;

st.IP = channel.EndPoint.ToString();

msg.type = "say";

msg.data = st;

foreach (TcpChannel item in channel.Server.GetOnlines())

{

item.Send(msg);

}

}

}

只需要以上简单的代码就完成了聊天室服务端的功能,对于用户退出可以通过连接释放事件来做处理具体代码:

protected override void OnDisposed(object sender, ChannelDisposedEventArgs e)

{

base.OnDisposed(sender, e);

Console.WriteLine("{0} disposed", e.Channel.EndPoint);

JsonMessage msg = new JsonMessage();

User user = new User();

user.Name = e.Channel.Name;

user.ID = e.Channel.ClientID;

user.IP = e.Channel.EndPoint.ToString();

msg.type = "unregister";

msg.data = (User)e.Channel.Tag;

foreach (TcpChannel item in this.Server.GetOnlines())

{

if (item != e.Channel)

item.Send(msg);

}

}

这样聊天定的服务端代码就已经完成了.

JavaScript代码

对于html5代码首先要做的一件事就是连接到服务器,相关javascript代码如下:

function connect() {

channel = new TcpChannel();

channel.Connected = function (evt) {

callRegister.parameters.name = $('#nikename').val();

channel.Send(callRegister, function (result) {

if (result.status == null || result.status == undefined) {

$('#dlgConnect').dialog('close');

registerid = result.data;

list();

}

});

};

channel.Disposed = function (evt) {

$('#dlgConnect').dialog('open');

};

channel.Error = function (evt) {

alert(evt);

};

channel.Receive = function (result) {

if (result.type == "register") {

var item = getUser(result.data);

$(item).appendTo($('#lstOnlines'));

}

else if (result.type == 'unregister') {

$('#user_' + result.data.ID).remove();

}

else if (result.type == 'say') {

addSayItem(result.data);

}

else {

}

}

channel.Connect($('#host').val());

}

通过Receive回调池数来处理不同消息的情况,如果是接收到其他用户的注册信息,则把用户信息添加到列表中;如果收到的其他用户的退出信息则在用户列表种移走;直接收到消息添加到消息显示框中即可.有jquery的帮助以上事件都变得非常简单.

用户注册调用过程:

var callRegister = { url: 'Handler.Register', parameters: { name: ''} };

function register() {

$('#frmRegister').form('submit', {

onSubmit: function () {

var isValid = $(this).form('validate');

if (isValid) {

connect();

}

return false;

}

});

}

获取在线用户列表过程:

发送消息过程:

总结

经过代码封装后websocket的处理变得非常简单,如果你有兴趣完全可以在此代码上扩展出一个更多功能的聊到室,如聊天室分组,发送信息图片共享等等.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现

摘要:随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐增多,如图片文字识别,人脸识别等等.而近年来,人脸表情识别技术成为…

android删除键监听,「React Native」Android返回键监听

在需要做监听的js中添加componentWillMount() {if (Platform.OS android) {BackHandler.addEventListener(hardwareBackPress, this.onBackHandler);}}componentWillUnmount() {if (Platform.OS android) {BackHandler.removeEventListener(hardwareBackPress, this.onBackHa…

列表页时间日期标签靠显示html,帝国CMS列表页面list.var分别调用年月日,显示个性时间日期...

在帝国CMS中列表页个性时间显示的实现方式,首先我们要知道用什么方法来实现,这里我们使用PHP代码来做。要在模板代码中使用PHP代码,就必须勾选此模板代码页面的-使用程序代码.位置就在添加模板页面的列表内容模板(list.var) (*)上边。然后我们在list.var…

html鼠标响应事件吗,学习JavaScript鼠标响应事件

本文为大家分享了一个简单的鼠标模拟案例,供大家参考,具体实现内容如下如何实现捕抓鼠标事件,当鼠标滑动时,获取当前鼠标的坐标,接着在一个透明区域里绑定捕抓的位移,这样就能在模拟的透明区域里实现鼠标滑…

html5边框闪烁,HTML – CSS框阴影动画像素艺术闪烁

部分用于测试,部分用于我的设计理念,我试图将动画gif转换为纯动画CSS.它几乎正常工作,但我遇到了障碍,我不确定是什么导致了我的问题,或者我如何解决它.我不幸地怀疑我只是限制了技术.至于实际的CSS,我一直在尝试实现这里的方法(动画框阴影属性),因为它看起来最可行&#xff1a…

html浏览器边框颜色,CSS设置字体和边框颜色时Chrome和其他主流浏览器差别的问题_html/css_WEB-ITnose...

a.toregister:link {text-decoration:none;width:90px;height:40px;font-family:"黑体" ;font-weight: bold;border:1px solid #cccccc;color:rgb(100,100,100);background-color:#d1d2d3;position:absolute;left:1348px;letter-spacing:3px;top:20px;text-align:cen…

用计算机表示45,计算机应用基础信息专业技术习题(45页)-原创力文档

计算机应用基础信息技术习题———————————————————————————————— 作者:———————————————————————————————— 日期:计算机应用基础信息技术习题11.在微机系统中,对输入、输出设备进行管理的…

电大计算机应用基础试卷号2007,电大计算机应用基础(试卷版)计算机试卷7.doc...

PAGE 7计算机试卷7一、单选题1.1946年在美国诞生的世界上第一台电子计算机的英文首字母缩写名为______。A.ENIACB.EBSACC.MARKD.EDVAC答案:A2.下列关于专用计算机的描述中,不正确的是_______。A.用途广泛B.针对性强、效率高C.为某种特定目的而设计D.结构…

如把联想电脑计算机图标放在桌面上,thinkpad电脑图标没了怎么恢复

正常情况下,在电脑的桌面上都会有系统自带的程序图标,以及用户自己创建的一些图标。可是最近有网友却跟小编反映说,自己thinkpad电脑出现了图标都没了的情况,不知道怎么回事,更加不清楚怎么恢复。那么对此今天本文就来…

未来计算机领域最急缺的人,未来十年最紧缺职业 没人愿意干的高薪职业

未来十年最紧缺职业 没人愿意干的高薪职业2019-03-19 09:25:56文/刘美娟未来十年中国最紧缺的高薪职业类型有:金融分析师、理财规划师以及动漫设计师等。未来最紧缺的高薪职业金融分析师金融分析师是证券投资和管理界的高级人才,目前我国能够真正拿到特许…

html分页实现w3c,分页_w3cschool

在其他的框架中,实现分页是令人感到苦恼的事,但是 Laravel 令它实现起来变得轻松。 Laravel 可以产生基于当前页面的智能「范围」链接,所产生的 HTML 兼容 Bootstrap CSS 框架.有几种方法来分页对象。最简单的是在搜索构建器使用 paginate 方…

口琴膜片什么作用_思域发动机舱里的这个东西是什么东东,它究竟有什么作用呢?...

​今天的文章我们主要来讲讲图中的这个东西究竟是什么?你们知道他是干什么的吗,这个东西究竟有什么作用?这是前几天的一个微信网友添加我微信问我的问题,今天对这个问题整理了一下,顺来来科普一下关于这个系统的具体应…

计算机控制用户自己编写什么软件吗,计算机控制软件技术基础.ppt

计算机控制软件技术基础I/O驱动连接方式需要为不同的硬件编写不同的“I/O驱动”程序,其硬件的改进或升级均需对“I/O驱动”进行修改。由于驱动程序的多样性和接口的不统一,监控应用软件难以满足与不同现场设备的通信要求。 OPC标准的目的是使驱动软件的接…

椭圆形中间一个大写的v_静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊_冠桥橡胶...

首页 > 新闻中心发布时间:2020-12-11 07:22:18 导读:冠桥橡胶为您提供静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊的相关知识与详情: 分集水器上,由于主要功能是调节,般选截止阀或闸阀。后来又出现了一种新…

计算机专业独显好还是集显好,笔记本选购指南:笔记本电脑核显好还是独显好?...

暑期装机热潮来了,而大部分大学生会选择入手一台笔记本而不是笨重的台式机,今天这里主要讲下笔记本选购指南,笔记本电脑核显好还是独显好?可能这个问题提出来,大家就要说很外行。不过既然是写给不太懂电脑的人看&#…

oracle查同比增长_天眼查:目前我国今年新增2.3万家充电桩相关企业,同比增长16.94%...

天眼查专业版数据显示,目前我国有近10万家经营范围含“充电桩、新能源智能充电、电动汽车充电”,且状态为在业、存续、迁入、迁出的充电桩相关企业。从地域分布来看,我国充电桩相关企业较多集中在广东、山东和江苏这三个省份,其中…

速卖通手机端怎样加入html,如何正确使用速卖通手机版的关联营销模板

如何正确使用速卖通手机版的关联营销模板旺销王发表于:2018年11月15日 17:47:22更新于:2019年08月07日 15:19:13很多速卖通卖家都在群里跟小编反应一个问题,为什么没有单独生成手机速卖通详情的速卖通产品的速卖通关联营销在速卖通店铺是可以…

能用来写安卓吗_iPad能代替笔记本吗,除了看剧还能用来做什么?

今天想和大家分享一下我手里的这台iPad Pro。关于它主要是两个方面:● 我自己用它会做哪些事情?● 分享几款我觉得好用的的iPad app(最后会附上我个人关于iPad的选购建议)首先,它不是我的第一款iPad产品。在我大二的时候,我非常幸…

2016重庆计算机一级考试题型,重庆计算机一级考试真题2016年最新(笔试+上机)

包括所有考试题型,真题模拟,学以致用,顺利过级不是梦想重庆计算机1级考试真题(笔试上机)【2014~2016年】一级笔试真题一、选择题1.微机中1K字节表示的二进制位数是( )。A、1000B、8x1000C、1024D、8x10242.计算机硬件能直接识别和执行的只有( )。A、高级语言B、符号…

c语言辗转相除法求最大公约数_趣味探究:妙法求“最大公因数”,比书上难一点,你敢挑战吗?(适合56年级)...

【题记】宝石虽落在泥土里,仍是宝石,砂粒虽被吹到天空中,还是砂粒。——莎士比亚不是有水的地方就有青蛙,但是青蛙叫的地方必定有水。——歌德【配合教材】本探究配合“因数与倍数”。通过本探究能够帮助学生巩固所学知识&#xf…