概述

websocket目前虽然无法普及应用,未来是什么样子,我们不得而知,但现在开始学习应用它,只有好处没有坏处,本随笔的WebSocket是版本13(RFC6455)协议的实现,也是目前websocket的最新协议,协议的英文文档可以查看http://tools.ietf.org/html/rfc6455,中文翻译的文档可以查看http://blog.csdn.net/stoneson/article/details/8063802,下面是聊天的截图例子(很粗糙,但应该不影响)。

客户端的实现

在支持webSocket的浏览器下,调用 new window.WebSocket(url)就返回了websocket对象,此对象有onopen、onmessage、onclose三个常用事件,分别表示连接成功、收到消息、连接断开,发送消息(文件或二进制数据)的方法是send。

           var inc = document.getElementById('incomming');
var form = document.getElementById('sendForm');
var input = document.getElementById('sendText'); inc.innerHTML += "正在连接到服务器 ..<br/>";
var wsImpl = window.WebSocket || window.MozWebSocket;
var ws = new wsImpl('ws://localhost:8181/'); ws.onopen = function () {
inc.innerHTML += '连接成功<br/>';
}; ws.onmessage = function (evt) {
inc.innerHTML += evt.data + '<br/>';
}; ws.onclose = function () {
inc.innerHTML += '连接已断开<br/>';
} form.addEventListener('submit', function (e) {
e.preventDefault();
var val = input.value;
ws.send(val);
input.value = "";
});

服务器的实现

服务器使用NetworkSocket组件的WebSocketServerBase来实现,过程中只要关心业务的实现就可以了,底层的代码,如果你感兴趣,点击链接进去就可以下载和查看。}

    public class Server : WebSocketServerBase
{
/// <summary>
/// 收到文本请求时出发
/// </summary>
/// <param name="client">客户端</param>
/// <param name="text">内容</param>
protected override void OnText(SocketAsync<Hybi13Packet> client, string text)
{
// 回复内容
this.SendText(client, "->" + text); // 转发给其它客户端
var others = this.AliveClients.Except(new[] { client });
foreach (var item in others)
{
this.SendText(item, client.ToString() + "->" + text);
} // ping此客户端,记录ping的时间
client.TagBag.PingTime = DateTime.Now;
this.SendPing(client, null);
} protected override void OnBinary(SocketAsync<Hybi13Packet> client, byte[] bytes)
{
this.SendBinary(client, bytes);
} // ping回复
protected override void OnPong(SocketAsync<Hybi13Packet> client, byte[] bytes)
{
var timeSpan = DateTime.Now.Subtract((DateTime)client.TagBag.PingTime);
Console.WriteLine("ping {0} 用时:{1}ms", client, timeSpan.TotalMilliseconds);
} protected override bool CheckHandshake(SocketAsync<Hybi13Packet> client, HandshakeRequest request)
{
Console.WriteLine("{0}进行握手完成", client);
return base.CheckHandshake(client, request);
} protected override void OnConnect(SocketAsync<Hybi13Packet> client)
{
Console.WriteLine("客户连接进来,当前连接数:{0}", this.AliveClients.Count);
} protected override void OnDisconnect(SocketAsync<Hybi13Packet> client)
{
Console.WriteLine("{0}断开连接,当前连接数:{1}", client, this.AliveClients.Count);
}
}

下载源码

所有相关代码

webSocket实现web及时聊天的例子的更多相关文章

  1. WEB实时聊天 comet推技术

    转自:http://www.cnblogs.com/wodemeng/archive/2012/04/06/2435302.html 今天晚上朋友遇到web服务端推技术的问题,自己就查了下资料,学习了 ...

  2. 基于Nodejs开发的web即时聊天工具

    由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...

  3. WebSocket实现web即时通信(后端nodejs实现)

    WebSocket实现web即时通信 一.首先看一下,HTTP.ajax轮询.long poll和WebSocket的区别: 1.HTTP 协议(短连接):一个 Request 一个 Response ...

  4. Node.js+websocket+mongodb实现即时聊天室

    ChatRoom Node.js+websocket+mongodb实现即时聊天室 A,nodejs简介:Node.js是一个可以让javascript运行在服务器端的平台,它可以让javascrip ...

  5. Python面试-websocket及web框架

    一.Websocket 1. websocket概念 在讲websocket之前,我们先来看看ajax轮询和long poll的实现机制. A.  ajax轮询 ajax轮询的原理非常简单,让浏览器隔 ...

  6. HTML5新特性 websocket(重点)--多对多聊天室

    一.html5新特性  websocket(重点)--多对多聊天室 HTTP:超文本传输协议 HTTP作用:传输网页中资源(html;css;js;image;video;..) HTTP是浏览器搬运 ...

  7. 如何利用WebSocket实现网页版聊天室

    花了将近一周的时间终于完成了利用WebSocket完成网页版聊天室这个小demo,期间还走过了一段"看似弯曲"的道路,但是我想其实也不算是弯路吧,因为你走过的路必将留下你的足迹.这 ...

  8. 【WebSocket No.2】WebSocket和Socket实现聊天群发

    介绍: 前面写过一篇简单的websocke实现服务端.这一篇就不在说什么基础的东西主要是来用实例说话,主要是讲一下实现单聊和群组聊天和所有群发的思路设计. 直接不懂的可以看一下上一篇简单版本再来看也行 ...

  9. vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

    一.项目介绍 基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室— ...

随机推荐

  1. jQuery 常用的代码片段

    1.  官网下载链接: http://jquery.com/download/ 2.  引入jquery 文件方式: (1) <script src="http://libs.baid ...

  2. 设计模式C#实现(四)——迭代器模式

    迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. UML类图: 煎饼屋和餐厅合并了!但是有个小问题,虽然两家都同意实现相同的菜单项MenuItem,但是煎饼屋想使用A ...

  3. xamarin.android 图片高斯模糊效果

    代码如下: private static float BITMAP_SCALE = 0.1f; private static float BLUR_RADIUS = 12.0f; public sta ...

  4. 【转载】PMC/PEC Boundary Conditions and Plane Wave Simulation

    原文链接 PMC/PEC Boundary Conditions and Plane Wave Simulation (FDTD) OptiFDTD now has options to use Pe ...

  5. dipole antenna simulation by CST

    CST偶极子天线仿真,半波振子天线 一.本文使用CST仿真频率为1GHz的偶极子天线,使用2013版本.仿真的步骤为 1.选择一个CST的天线工程模板 2.设置好默认的单位 3.设置背景的材料(空气腔 ...

  6. codevs 2822 爱在心中

    codevs 2822 爱在心中  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同, ...

  7. UESTC 913 握手 Havel定理+优先队列

    给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 此题因为是无自环无重边,所以是简单图.用判定简单图可图化 ...

  8. HDU 2065 “红色病毒”问题 --指数型母函数

    这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次 ...

  9. HOJ 2275 Number sequence

    题意:问你有多少个序列满足Ai < Aj > Ak and i < j < k. 思路:对每个数求它之前和之后分别有多少个个数比它小,两边相乘.最后求和.具体实现先用树状数组正 ...

  10. MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...