实现WebSocket对象的web浏览器通过WebSocket对象公开所有必需的客户端功能。
创建WebSocket对象
var ws = new WebSocket(url); //url格式:ws://ip地址:端口号/资源名称(2)webSocket事件
webSocket相关的事件,浏览器与服务器建立连接、如何接收服务器消息、如何向服务器发送消息(这个使用的是webSocket对象中的方法)等事件描述。
| 事件 | 事件处理程序 | 描述 |
|---|---|---|
| open | webSocket对象.onopen | 连接建立时触发 |
| message | webSocket对象.onmessage | 客户端接收服务端数据时触发 |
| error | webSocket对象.onerror | 通信发生错误时触发 |
| close | webSocket对象.onclose | 连接关闭时触发 |
| 方法 | 描述 |
|---|---|
| send() | 客户端向服务器端发送数据时的方法 |
前提:Tomcat 7.0.5版本后才开始支持WebSocket。
Java WebSocket应用由一系列的WebSocketEndpoint组成。
Endpoint是Java中的一个对象,代表WebSocket链接的一端(每一个客户端需要创建一个Endpoint对象)
对于服务器端,Endpoint对象可以看作是处理WebSocket消息的接口。===类似Servlet与HTTP请求中的Servlet
两种方式定义Endpoint对象。
- 编程式,通过代码编程,继承类Javax.websocket.Endpoint并实现其方法;
- 注解式,通过定义一个POJO类,并使用**@ServerEndpoint**相关注解。
Endpoint对象实例在WebSocket握手时创建,并在客户端与服务端链接过程中有效,最后在链接关闭时结束。
在Endpoint接口中明确定义了与生命周期相关的方法。
| 方法 | 含义描述 | 对应注解 |
|---|---|---|
| onClose() | 当会话关闭时调用 | @Onclose |
| onOpen() | 当开启一个新的会话时调用,该方法是客户端与服务端握手成功后调用的方法 | @OnOpen |
| onError() | 当连接过程中异常时调用 | @OnError |
通过为Session添加MessageHandler消息处理器来接收消息。
当采用注解方式定义Endpoint时,可以使用**@OnMessage**注解指定接收消息的方法。
服务器向客户端发送消息由RemoteEndpoint完成,其实例由Session维护,根据使用情况,可以通过Session.getBasicRemote获取同步消息发送的实例,然后调用sendXxx()方法就可以发送消息。可以通过Session.getAsyncRemote获取异步消息发送实例。
简易聊天室服务端代码实例:
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@ServerEndpoint("robin")
public class chatEndPoint {
private static Set webSocketSet = new HashSet();
private Session session;
@onMessage
public void onMessage(String message,Session session) throws IOException {
System.out.println("接收的消息是:"+message);
System.out.println(session);
//将消息发送给其他的用户
for(chatEndPoint chat:webSocketSet){
if (chat != this){
chat.session.getBasicRemote().sendText(message);
}
}
}
@onOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this);
}
@onClose
public void onClose(Session session){
System.out.println("连接关闭了....");
}
@onError
public void onError(Session session,Throwable error){
System.out.println("出错了...."+error.getMessage());
}
}



