【Html5客户端API】
1.创建websocket对象
var connection = new WebSocket('ws[s]://www.example.com/chat',可选自己实现的协议{'chat.v1'});
//如果消息是二进制形式 connection.binaryType = 'arraybuffer';
2.使用websocket对象
* 内部使用connection.readyState:CONNECTING(0) OPEN(1) | CLOSING(2) | CLOSED(3)
closing状态 => closed状态 触发onClose(event) Clean reason code(值1000为正常)
connecting状态 => open状态 触发onOpen事件。
onerror(event) data
onmessage(event) data
close(code,可选reason)
send(onlyone) 仅接受一个参数 String、Blob、ArrayBuffer、ArrayBufferView。
connection.onopen = function(){
var intervalId = window.setInerval(function(){
if(connection.readyState != WebSocket.OPEN){
window..clearInterval(intervalid);
return;
}
if(connection.bufferedAmount == 0)
connection.send(updateModelData);
},50);
}
……………………………………………………………………………………………………………………………………
【Java客户端的WebSocket API】
一、 【连接上WebSocket Server】
//WebSocketContainer提供所有WebSocket客户端特性访问
ContainerProvider.getWebSocketContainer(),connectToServer(重载4个方法) 返回一个session (可以用来关闭会话、或者发送消息到远程终端)
1.基本参数是uri
2.使用@ClientEndPoint 或者使用@EndPoint + ClientEndPointConfig
二、【通信】
WebSocket的 EndPoint 有三个方法 onOpen onClose onError
ClientEndPoint 也可以有@OnOpen @OnClose @OnError
两者通过 onMessage通信,接收消息。
……………………………………………………………………………………………………………………………………
三、【服务器API】
WebSocket提供了API接口,一般Web容器已经提供了客户端和服务端实现。
如果需求只是客户端(包括浏览器、java终端)
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-client-api</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
【@ServerEndponit("/game/{gameType}")】最重要握手之后,服务器和客户端都编程对等端点。
只需要使用@ServerEndPoint注解服务器终端类,WebSocket实现自动扫描类的注解,自动选择注册服务器终端。
ServerContainer将在每次收到WebSocket连接时创建对应终端类的实例,在连接关闭后销毁。