time 
设为首页】【收藏本站
当前位置: 主页 > WEB教程 > Html教程 > HTML5使用WebSocket实现聊天室实例

HTML5使用WebSocket实现聊天室实例

时间:2012-12-12 00:15 点击:5849次 字体:[ ]




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

功能

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

1)注册

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

2)发信息

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

3)退出

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

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

HTML5使用WebSocket实现聊天室实例_www.fengfly.com

C#服务端代码

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

  1. /// <summary> 
  2.  
  3.     /// Copyright © henryfan 2012         
  4.  
  5.     ///Email:   henryfan@msn.com     
  6.  
  7.     ///HomePage:    http://www.ikende.com        
  8.  
  9.     ///CreateTime:  2012/12/7 21:45:25 
  10.  
  11.     /// </summary> 
  12.  
  13.     class Handler 
  14.  
  15.     { 
  16.  
  17.         public long Register(string name) 
  18.  
  19.         { 
  20.  
  21.              
  22.  
  23.             TcpChannel channel = MethodContext.Current.Channel; 
  24.  
  25.             Console.WriteLine("{0} register name:{1}", channel.EndPoint, name); 
  26.  
  27.             channel.Name = name; 
  28.  
  29.             JsonMessage msg = new JsonMessage(); 
  30.  
  31.             User user = new User(); 
  32.  
  33.             user.Name = name; 
  34.  
  35.             user.ID = channel.ClientID; 
  36.  
  37.             user.IP = channel.EndPoint.ToString(); 
  38.  
  39.             channel.Tag = user; 
  40.  
  41.             msg.type = "register"
  42.  
  43.             msg.data = user; 
  44.  
  45.             foreach (TcpChannel item in channel.Server.GetOnlines()) 
  46.  
  47.             { 
  48.  
  49.                 if (item != channel) 
  50.  
  51.                     item.Send(msg); 
  52.  
  53.             } 
  54.  
  55.             return channel.ClientID; 
  56.  
  57.         } 
  58.  
  59.         public IList<User> List() 
  60.  
  61.         { 
  62.  
  63.             TcpChannel channel = MethodContext.Current.Channel; 
  64.  
  65.             IList<User> result = new List<User>(); 
  66.  
  67.             foreach (TcpChannel item in channel.Server.GetOnlines()) 
  68.  
  69.             { 
  70.  
  71.                 if (item != channel) 
  72.  
  73.                     result.Add((User)item.Tag); 
  74.  
  75.             } 
  76.  
  77.             return result; 
  78.  
  79.         } 
  80.  
  81.         public void Say(string Content) 
  82.  
  83.         { 
  84.  
  85.             TcpChannel channel = MethodContext.Current.Channel; 
  86.  
  87.             JsonMessage msg = new JsonMessage(); 
  88.  
  89.             SayText st = new SayText(); 
  90.  
  91.             st.Name = channel.Name; 
  92.  
  93.             st.ID = channel.ClientID; 
  94.  
  95.             st.Date = DateTime.Now; 
  96.  
  97.             st.Content = Content; 
  98.  
  99.             st.IP = channel.EndPoint.ToString(); 
  100.  
  101.             msg.type = "say"
  102.  
  103.             msg.data = st; 
  104.  
  105.             foreach (TcpChannel item in channel.Server.GetOnlines()) 
  106.  
  107.             { 
  108.  
  109.                 item.Send(msg); 
  110.  
  111.             } 
  112.  
  113.   
  114.  
  115.         } 
  116.  
  117.   
  118.  
  119.     } 



本文地址 : http://www.fengfly.com/plus/view-210870-1.html
标签: HTML5 WebSocket
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: