websocket的url开头是ws,如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>WebSocket 客户端</title> </head> <body> <div> <input type="button" id="btnConnection" value="连接" /> <input type="button" id="btnClose" value="关闭" /> <input type="button" id="btnSend" value="发送" /> </div> <script src="js/jquery-1.11.1.min.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> var socket; if(typeof(WebSocket) == "undefined") { alert("您的浏览器不支持WebSocket"); return; } $("#btnConnection").click(function() { //实现化WebSocket对象,指定要连接的服务器地址与端口 socket = new WebSocket("ws://192.168.1.2:8888"); //打开事件 socket.onopen = function() { alert("Socket 已打开"); //socket.send("这是来自客户端的消息" + location.href + new Date()); }; //获得消息事件 socket.onmessage = function(msg) { alert(msg.data); }; //关闭事件 socket.onclose = function() { alert("Socket已关闭"); }; //发生了错误事件 socket.onerror = function() { alert("发生了错误"); } }); //发送消息 $("#btnSend").click(function() { socket.send("这是来自客户端的消息" + location.href + new Date()); }); //关闭 $("#btnClose").click(function() { socket.close(); }); </script> </body> </html>JSR356定义了WebSocket的规范,Tomcat7中实现了该标准。JSR356 的 WebSocket 规范使用 javax.websocket.*的 API,可以将一个普通 Java 对象(POJO)使用 @ServerEndpoint 注释作为 WebSocket 服务器的端点。
@ServerEndpoint("/webSocketTest") public class EchoEndpoint { @OnOpen //在这个端点一个新的连接建立时被调用 public void onOpen(Session session) throws IOException { //以下代码省略... } @OnMessage //Java方法用于接收传入的WebSocket信息,这个信息可以是文本格式,也可以是二进制格式。 public String onMessage(String message) { //以下代码省略... } @OnError //错误时候执行 public void onError(Throwable t) { //以下代码省略... } /* * 在连接被终止时调用 * 参数closeReason可封装更多细节,如为什么一个WebSocket连接关闭。 * Session表明两个WebSocket端点对话连接的另一端,可以理解为类似HTTPSession的概念。 **/ @OnClose public void onClose(Session session, CloseReason reason) { //以下代码省略... } }