Websocket全讲解。跨平台的通讯协议基于websocket的高并发即时通讯服务器开发。

本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂。 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加大。本博加以整理,并且实践。

所用核心技术选型:

Tomcat + Spring 4.0.3 + Mongodb(高并发数据库)

+ SpringQueue(消息队列)+ ActiveMQ (消息队列)

+ Spring-data-Mongo + Servlet 3.0

+Spring-Websocket

+ Maven

注:以下Websocket 均省略成 WB

先说Websocket 的原理。 Websocket 是全双工通讯(说白了就是俩都可以通讯,服务器也可以给客户端发消息,客户端也能给服务器发消息)。也是基于TCP的,效率是很高的,首先这个技术的底层选用,就决定了完全可以用wb这个技术做高并发应用,而且开发非常快!!代码非常简单!!最重要的是稳定性,扩展性等等都有保证,等会儿说为什么说都有保证。

WB 不同于TCP的三次握手。  WB是先进行一次HTTP请求,这个请求头不同于普通HTTP请求,等会贴出来讲解。然后服务器开始辨认请求头,如果是WB的请求头,则开始进行普通的TCP连接,即三次握手(不懂的TCP的,出门百度)。如果不是WB的HTTP请求头,那就是按普通的HTTP请求处理。

流程梳理: HTTP特殊请求(有个特殊的头) ---- 》 服务请接收判断 ----- 》 认出来了,确实是WB请求头,开启TCP 三次握手,建立连接后,和TCP一样了就------》没有认出来,不是WB的请求头,按普通HTTP请求处理。 

很清楚了吧。这是个基础,先理解了,下面写程序才好搞。下面这段是Webscoket的请求头。 GET请求

 ' ) ){
            last_health = time.getTime();
            return;
        }
        
        $("#chatbox").val( $("#chatbox").val() + msg.data + "\n" );
        $("#chatbox").attr("scrollTop",$("#chatbox").attr("scrollHeight"));
    }
    
    return ws;
}
</script>
</head>

<body>


<p>web socket连接状态:&nbsp;&nbsp;<span id="statustxt">连接中...</span></p>
<p>心跳状态:<span id="keeplive_box">检测中...</span></p>
<p>
  <textarea name="chatbox" id="chatbox" cols="55" rows="20" readonly="readonly"></textarea>
</p>
<p>
  <p>发送文本到Websocket服务器</p>
  <input name="mysendbox" type="text" id="mysendbox" size="50" />
  &nbsp;
  <input type="button" name="send_btn" id="send_btn" value="Send" disabled="disabled" />
  <input type="button" onclick="javascript:ws.close()" value="Close"/>
</p>
</body>
</html>


核心的就这么多。

这些方法理解了,其他的,靠自己发挥想象~

对了,每个不同的连接都会有一个不同的WebSocketSession session   你可以把这个session存入一个全局的ConcurrentHashMap中!!作为连接池!!

用的时候 用 map.get(key); 然后就能用sendMessage(); 发送给他消息了!!!

什么时候存这个session,这就看你的业务需要了。总之每个WebSocketSession 标识一个完全不同的新的连接。客户句柄来形容,也可以~

然后虽然你用上了WB 但是还是要自己做出来。心跳包~ 数据分割处理~ 等等一些基本的业务逻辑~ 什么地方用消息队列分发,那就要看你业务怎么设计了。

离线消息怎么做,可以找我私聊QQ。631768417 有不懂的也可以私聊我QQ

最后!!最有用的!!websocket可以做移动端 (安卓IOS等)即时通讯服务器。但是需要用到一个jar包。在github上搜索 websocket client (websocket的客户端) 有java的实现也有object-c的实现

这个思路提供出来之后,你就知道websocket 的强大了吧。不但敏捷开发!而且跨平台!!可以做android推送解决方案!! 当然也可以整合ios做即时通讯!!当然!!HTML更可以!因为原生的就是HTML!!! 强大的websocket为企业即时通讯方案提供了更好的出路!!!

核心已经讲解!更多的发挥想象吧!!!

更多相关文章
  • 高效简易开发基于websocket的通讯应用
            websocket的主要是为了解决在web上应用长连接进行灵活的通讯应用而产生,但websocket本身只是一个基础协议,对于消息上还不算灵活,毕竟websocket只提供文本和二进制流这种基础数据格式.在实际应用则更偏向于对象消息的处理,而在这基础上更希望集成一系列的消息路由机制来 ...
  • 随着html5的广泛应用,基于websocket协议的即时通讯有了越来越多的使用场景,本文使用python中的websocket-client模块来做相关的接口测试 token = getToken(user,password) websocket.enableTrace(True) strUrl= ...
  • } } View Code ApplicationContext ctx = IBusinessOrder orderBusiness = (IBusinessOrder) ctx.getBean("orderBusiness" OrderInfo order = orderBu ...
  • 开源C#跨平台物联网通讯框架ServerSuperIOSSIO
    [连载]<C#通讯(串口和网络)框架的设计与实现>-1.通讯框架介绍 [连载]<C#通讯(串口和网络)框架的设计与实现>-2.框架的总体设计 目       录 C#跨平台物联网通讯框架ServerSuperIO(SSIO)正式开源... 1 1.      SSIO的特点 ...
  • 说起NMEA协议,只要接触过GPS设备的人,或者说是要用到GPS设备研发的人都知道,这是一个很常用的GPS通讯协议,而且也有很多人遇到关于NEMA协议的一些问题,我忽然有一个想法,就是按照自己对这个协议的一些理解,写一点这方面的东西,看是不是能帮刚刚入门的人解答一些疑问,由于笔者水平有限,这个东西也 ...
  • Netty 通讯协议结构设计的总结 key words: 通信,协议,结构设计,netty,解码器,LengthFieldBasedFrameDecoder 原创 包含与机器/设备的通讯协议结构的设计,安全性,数据有效性的设计思路记录 通讯协议结构选择 按照解决TCP粘包的解决方案的协议设计思路,大 ...
  • 2.4  规划网络和通讯协议2.4.1 网络带宽 数字网络的速率使用波特率(baud)来表示,表示每秒钟的脉冲数,由于每个脉冲传送一个二进制的位,因此常使用比特率(bps,即 bit per second))来表示速率.提示: 在计算机术语里,通常用小写字母 b 表示"位"(bi ...
  • 跨平台开源通讯组件elasticcommunication
    elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.net的通讯交互应用.EC抽取的基础的通讯协议默认支持protobuf,msgpack的数据对象进行通 ...
一周排行
  • 9、Altiriscms7.0远程协助和实时管理
    Inventory solution 远程协助方案,这个功能强大,在日常企业环境中用处较大 ...
  • Excel默认不支持Unix格式时间戳,这在导入数据时十分不便.可以用以下公式将时间戳转换成Excel格式的时间:=(A1+8*3600)/86400+70*365+19其中A1为时间戳的单元格,8*3600中的8为 ...
  •     Javascript的弱类型以及函数作用域等规则使用编写Javascript代码极为容易,但是编写可维护.高质量的代码却变得十分困难,这个系列的文章将总结在项目开发过程中,能够改善代码可读性.可维护性及优化运 ...
  • 命令行下启动tomcat进行调试的命令:    启动[当前目录:c:\Program Files\Apache Software Foundation\Tomcat 7.0\bin]  java -classpath ...
  • MySQL创建数据表(下)五.数据表类型及存储位置1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎.2. showengines; #查看MySQL所 ...
  •       前天我去一个客户那里装系统,那里的环境是这样的:他们那里是两台邮件服务器,同时用,数据同步,就算是备份和冗余,现在正常的叫A,我要装系统的是B,B有两个盘,一个盘为一个分区,分别是C.D,以前一直用C盘, ...
  • Linux下为iptables增加layer7补丁(Linux2.6.25内核)
    系统环境:RHEL5 [ 2.6..el5xen ]软件环境:将新的内核和补丁下载 ...
  • 导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物 ...
  • 在google上搜索关于repeater模板编辑的问题的时候找到雨寒的blog...看到上面有写关于MS会议的文章...就顺便扫了一下...然后加入了一个51CTO的群...在以小废物为代表的热心群友的逼迫下...本 ...
  • 4 文件管理4.1 diff(differential)功能说明:比较文件的差异. 语 法:diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D ...