在线聊天室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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

椭圆形中间一个大写的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产品。在我大二的时候,我非常幸…

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

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

中北大学和陕西科技大学计算机专业,西北地区两所重点大学,中北大学和陕西科技大学...

中北大学,位于山西省太原市。山西省属重点大学,省部共建高校。中北大学创办于1941年5月,时名太行工业学校。建国后迁入现址,更名为华北兵工职业学校。1958年升级为太原机械学院。1961年合并现北京理工大学4个常规兵器专业&#xf…

cxgrid 行合并单元格_合并单元格求和、计数、加序号

合并单元格求和同时选中D2:D13单元格区域,编辑栏输入公式后按Ctrl回车:SUM(C2:C13)-SUM(D3:D13)有两个地方需要注意,一是输入公式后,要按Ctrl回车。二是注意第二个SUM函数的起始引用位置,是公式所在单元格的下一个单元…

清华大学计算机系男女比v,清华男女生比例惊人,但找女朋友却不愁,这是为什么?...

对于学生来讲,十八九岁就是恋爱的年龄,由于上高中我们有升学的压力,所以到了大学以后,多数人都会轰轰烈烈谈一次恋爱,但对于理工科为主的大学来讲,由于男女比例严重失调,谈恋爱就成了一种奢侈。…

mapinfo图层导入奥维_(通信技能分享)怎样把谷歌地球上画的路线图导入到测试软件中!...

对于我们外场的工作人员来说,路线图很重要,但是有些我们没有去过现场,测试过程中又不好看手机看地图,今天我们就来学习一下如何通过谷歌地图画线路图,然后做成tab图层导入测试软件里面去。1、我们需要先画一个大体路线…

如何清理和维护计算机,电脑的优化与维护操作教程

我把电脑日常的维护分成二部分,第一个是清理,第二个是优化。一、电脑的清理在电脑的日常使用中,会产生大量的垃圾文件。垃圾文件是怎么来的?第一种垃圾文件是网络临时文件,当我们上网浏览网页,看电影&#…

label里面的文字换行_批量识别图中文字自动命名,让你1秒找到骚图!太强大了!...

每次做视频,找图就相当的费劲,因为图片太多,每次想要找到固定的图的话。就像大海捞针一样。因为上个版本的代码保存图片是截取部分图片链接进行命名的,所以名称是随机的。所以今天我准备对这些图片重新命名。按照表情包中的文字来…

共享可写节包含重定位_今年双11好房也打折!贝壳兰州站“11.11新房节” 5日开启...

随着双十一的临近,各大平台都陆续吹响了 " 买买买 " 的号角,而和相比往年,今年的双十一的有点不一样,好房子也能真打折。据悉,11 月 5 日起,贝壳找房将开启 "11.11 新房节 "&#xff0…

光纤终端服务器,[原创]简单介绍光缆终端盒知识

原标题:[原创]简单介绍光缆终端盒知识光缆终端盒又叫光纤终端盒,很多工程商也叫光缆盘纤盒,是在光缆敷设的终端保护光缆和尾纤熔接的盒子,主要用于室内外光缆的直通熔接和分支接续及光缆终端的固定,起到尾纤盘储和保护…