Websocket(2)--接口说明

来源:互联网 发布:看图王软件官方下载 编辑:程序博客网 时间:2024/05/21 08:47

这节简单介绍下如何构建一个websocket应用及相应的接口规范。
目前大多数主流服务器支持websocket,下面是各浏览器支持情况:
这里写图片描述
本文所涉及示例都是在Firefox下测试。
服务器端可以自己实现代码(主要思路是解析消息头,获取Sec-WebSocket-Key,计算出服务器端Sec-WebSocket-Accept),市场上开源的也比较多,tomcat7和javeEE7(不是jdk7)也都实现了websocket。
1、客户端
想要发送一个websocket请求,客户端很简单:

<script>var wsServer = 'ws://localhost:8080/websocket'; //服务器地址var websocket = new WebSocket(wsServer); //创建WebSocket对象websocket.send("hello");//向服务器发送消息websocket.onopen = function (evt) {//已经建立连接onopen};websocket.onclose = function (evt) {//已经关闭连接onclose};websocket.onmessage = function (evt) {//收到服务器消息,使用evt.data提取};websocket.onerror = function (evt) {//产生异常}; </script>

其中url就是我们要访问的地址,ws是普通的WebSocket通信协议,而wss是安全的WebSocket通信协议(就像HTTP与HTTPS之间的差异一样)。在缺省情况下,ws的端口是80而wss的端口是443。我们可以调用send()方法将消息发送到客户端
还可以在代码前判断浏览器是不是支持websocket

if (!window.WebSocket) {alert("您的浏览器不支持websocket!");}

websocket还定义了一个readyState属性,该属性可以返回该WebSocket所处的状态。可能返回如下几个状态值:
CONNECTING (0):表示正在尝试与服务器建立连接;
OPEN (1): 已经建立连接,可以进行通讯;
CLOSING (2):通过关闭握手,正在关闭连接;
CLOSED (3):连接已经关闭或无法打开;

2、服务端
本文采用tomcat7对websocket的实现。

package com.css.sword.websocket;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;import javax.websocket.OnClose;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/websocket")public class WebSocketServer {    @OnOpen    public void open(Session session){    System.out.println("已建立连接!");       }    @OnClose    public void close(Session session){    System.out.println("已关闭连接!");       }    @OnMessage    public void onMessage(Session session,String message) throws IOException, InterruptedException{    session.getBasicRemote().sendText("hello");     }}

@ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端。注解的值将被用于监听用户连接的终端访问URL地址(客户端ws协议地址:ws://localhost:8080/websocket中的websocket)。

onOpen 和 onClose 方法分别被@OnOpen和@OnClose 所注解。这两个注解的作用不言自明:他们定义了当一个新用户连接和断开的时候所调用的方法。

onMessage 方法被@OnMessage所注解。这个注解定义了当服务器接收到客户端发送的消息时所调用的方法。如果有这个session参数,容器将会把当前发送消息客户端的连接Session注入进去,message参数接收客户端发来的消息。
如需向客户端发送消息可调用 session.getBasicRemote().sendXXX(“hello”); 可send不同类型,具体的可以去查api。
简而言之,如需要使用websocket与远程服务器通信(tomcat7),需进行以下几个步骤:
(1) 客户端创建一个websocket对象
(2) 客户端如果需要发送消息,调用websocket的send()方法;
(3) 客户端如果需要接受消息,则为websocket的onmessage方法绑定事件监听器即可。
(4) 服务器想接受消息,接收消息类(用@ServerEndpoint注解)有实现接收消息的方法(用@OnMessage)注解,其参数message即为接收到的消息;
(5) 服务器想发送消息,调用session.getXXXRemote().sendXXX(”XXX“);方法即可;

0 0
原创粉丝点击