
webSocket实现web及时聊天的例子
发布日期:2021-05-09 04:10:23
浏览次数:17
分类:博客文章
本文共 2865 字,大约阅读时间需要 9 分钟。
概述
websocket目前虽然无法普及应用,未来是什么样子,我们不得而知,但现在开始学习应用它,只有好处没有坏处,本随笔的WebSocket是版本13(RFC6455)协议的实现,也是目前websocket的最新协议,协议的英文文档可以查看,中文翻译的文档可以查看,下面是聊天的截图例子(很粗糙,但应该不影响)。
客户端的实现
在支持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 += "正在连接到服务器 .."; var wsImpl = window.WebSocket || window.MozWebSocket; var ws = new wsImpl('ws://localhost:8181/'); ws.onopen = function () { inc.innerHTML += '连接成功'; }; ws.onmessage = function (evt) { inc.innerHTML += evt.data + ''; }; ws.onclose = function () { inc.innerHTML += '连接已断开'; } form.addEventListener('submit', function (e) { e.preventDefault(); var val = input.value; ws.send(val); input.value = ""; });
服务器的实现
服务器使用组件的来实现,过程中只要关心业务的实现就可以了,底层的代码,如果你感兴趣,点击链接进去就可以下载和查看。}
public class Server : WebSocketServerBase { ////// 收到文本请求时出发 /// /// 客户端 /// 内容 protected override void OnText(SocketAsyncclient, 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 client, byte[] bytes) { this.SendBinary(client, bytes); } // ping回复 protected override void OnPong(SocketAsync 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 client, HandshakeRequest request) { Console.WriteLine("{0}进行握手完成", client); return base.CheckHandshake(client, request); } protected override void OnConnect(SocketAsync client) { Console.WriteLine("客户连接进来,当前连接数:{0}", this.AliveClients.Count); } protected override void OnDisconnect(SocketAsync client) { Console.WriteLine("{0}断开连接,当前连接数:{1}", client, this.AliveClients.Count); } }
下载源码
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月12日 08时06分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java 中初始化 List 集合的 6 种方式!
2021-05-09
终于有人把 HTTPS 原理讲清楚了!
2021-05-09
别乱提交代码了,看下大厂 Git 提交规范是怎么做的!
2021-05-09
在滴滴和头条干了 2 年后端开发,太真实…
2021-05-09
送给你 12 个 Git 使用技巧!
2021-05-09
使用 Redis 实现一个轻量级的搜索引擎,牛逼!
2021-05-09
你还在用分页?试试 MyBatis 流式查询,真心强大!
2021-05-09
你还在用命令看日志?快用 Kibana 吧,一张图片胜过千万行日志!
2021-05-09
python进阶(3)json文件与python字典的转化
2021-05-09
Centos中更改hostname
2021-05-09
Linux中对用户操作
2021-05-09
大数据整理——数据集成
2021-05-09
Linux查看CUDA和cuDNN版本
2021-05-09
centos修改mysql5.7默认端口后启动异常
2021-05-09
java面试系列<4>——IO
2021-05-09
来讲讲你对ThreadLocal的理解
2021-05-09
No.017:Letter Combinations of a Phone Number
2021-05-09
No.021:Merge Two Sorted Lists
2021-05-09
RESTful API 介绍,设计
2021-05-09
asp.net中用FileStream类实现下载文件功能,自定义下载路径,像IE下载一样
2021-05-09