1、先来看下效果,文章结尾有源码下载
2、上线提醒
3、代码放在笔记本上的tomcat,两个浏览器实现即时聊天
4、同一局域网下的台式电脑进行即时聊天,记得关闭防火墙。
有的浏览器不支持websocket,比如
5、由下图可知传统的tcp/ip协议需要经过3次握手连接,而websocket只需要连接一次。WebSocket 是类似 Socket 的 TCP 长连接的通讯模式,一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在客户端断开 WebSocket 连接或 Server 端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。
传统 HTTP 请求响应客户端服务器交互图
WebSocket 请求响应客户端服务器交互图
6、
//第一行代码是在申请一个WebSocket对象,参数是需要连接的服务器端的地址,同http协议使用http://开头一样,
WebSocket协议的URL使用ws://开头,另外安全的WebSocket协议使用wss://开头。
onopen、onclose和onmessage方法把事件连接到Socket实例上。每个方法都提供了一个事件,以表示Socket的状态。
var socket = new WebSocket("ws://192.168.1.116:8889");
socket.onmessage = function(event) {
alert("Received data from websocket: " + event.data);
}
socket.onopen = function(event) {
alert("Web Socket opened!");
};
socket.onclose = function(event) {
alert("Web Socket closed.");
};
//消息接收
socket.onmessage = function(message) {
var message = JSON.parse(message.data);
if (message.type == 'count') {
userCount = message.msg;
}else if(message.type == 'goOut'){
$("body").html("");
goOut("此用户在其它终端已经早于您登录,您暂时无法登录");
}else if(message.type == 'thegoout'){
$("body").html("");
goOut("您被系统管理员强制下线");
}else if(message.type == 'changeMenu'){
window.location.href=locat+'/main/yes';
}else if(message.type == 'userlist'){
userlist = message.list;
}
};
7、源码地址http://download.csdn.net/detail/u014520797/9789272
8、注意,代码被使用时需要修改ip地址参数