WebSocket协议介绍
WebSocket协议是一个网络协议,允许两个相连的端在一个单一TCP连接上进行全双工消息通信。
在WebSocket的场景中,连接通过HTTP和WebSocket端点交互的方式建立。连接的一方发送一个专门定制的HTTP请求,启动包含其希望连接的WebSocket的URL。它开始活动并被称为打开阶段握手。如果服务器愿意接受连接,服务器制定一个称为打开阶段握手响应的特殊的HTTP响应并将其发送会客户端。此时TCP连接已经建立,能够保证WebSocket消息的往返传递。连接一直保持直到任意一方终止连接,或者某些外部因素导致连接关闭。
Java Web Socket API是最近JavaEE7平台的核心特性,因此不是用tomcat部署的用户要注意依赖一下两个包
org.apache.tomcat
tomcat-websocket-api
7.0.47
provided
javax
javaee-api
7.0
provided
创建第一个WebSocket应用,部署在Tomcat7及以上版本
服务端代码:EchoServer.javapackage org.mychat.websocket.server;
import javax.websocket.OnMessage;
import javax.websocket.server.ServerEndpoint;
/**
* @author 陈胜
* 注解@ServerEndpoint是类级别注解,
* 用于告诉java平台它注解的类实际上要称为一个WebSocket端点
*/
@ServerEndpoint("/mychat.ws")
public class EchoServer {
@OnMessage
public String echo(String incomingMessage){
System.out.println("接收到的消息: " + incomingMessage);
return "I got this (" + incomingMessage + "),so I am sending it back";
}
}
客户端代码websocket_client.js + index.htmlvar echo_websocket;
function init(){
output = document.getElementById("output");
}
function send_echo(){
var wsUri = "ws://127.0.0.1:8080/mychat/mychat.ws";
writeToScreen("Connecting to "+wsUri);
echo_websocket = new WebSocket(wsUri);
echo_websocket.onopen = function(evt){
writeToScreen("Connected");
doSend(document.getElementById("textID").value);
};
echo_websocket.onmessage = function(evt){
writeToScreen("Received message: "+evt.data);
echo_websocket.close();
};
echo_websocket.onerror = function(evt){
writeToScreen("ERROR:" + evt.data);
echo_websocket.close();
};
}
function doSend(message){
echo_websocket.send(message);
writeToScreen("Send message: " + message);
}
function writeToScreen(message){
// console.log("接收到的Message:"+message);
var pre = document.createElement("p");
pre.style.wordWrap = "bread-word";
pre.innerHTML = message;
output.appendChild(pre);
}
window.addEventListener("load", init, false);
html>
发送消息页面Echo Server
运行结果:
虽然很简单,但是,我们已经与websocket已经有了亲密的接触。