zhangx的技术小站

WebSocket API简介:

首先看一段简单的javascript代码,,该代码调用了WebSockets的API。

[javascript]view plain

ws.onopen=function(){ws.send(“Test!”);};ws.onmessage=function(evt){console.log(evt.data);ws.close();};ws.onclose=function(evt){console.log(“WebSocketClosed!”);};ws.onerror=function(evt){console.log(“WebSocketError!”);};

这份代码总共只有5行,现在简单概述一下这5行代码的意义。

第一行代码是在申请一个WebSocket对象,参数是需要连接的服务器端的地址,同http协议使用开头一样,WebSocket协议的URL使用ws://开头,另外安全的WebSocket协议使用wss://开头。

第二行到第五行为WebSocket对象注册消息的处理函数,WebSocket对象一共支持四个消息 onopen, onmessage, onclose和onerror,当Browser和WebSocketServer连接成功后,会触发onopen消息;如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息;当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,使得UI有更快的响应时间,得到更好的用户体验。

实现:

@ServerEndpoint(value = "/websocket/{random}")public class WebSocket {private static final Set<WebSocket> connections =new CopyOnWriteArraySet<WebSocket>();private Session session;private String random;public WebSocket() {}/*当websocket的客户端连接到服务器时候,这个方法就会执行,并且传递一个session会话对象来我们拿到这话session,就是可以给客户端发送消息*/@OnOpenpublic void start(Session session,@PathParam("random") String random) {this.random=random;System.out.println(random);this.session = session;connections.add(this);}/*客户端被关闭时候,就会自动会调用这个方法*/@OnClosepublic void end() {connections.remove(this);}/*客户端给服务器发送消息,这个方法会自动调用,并且可以拿到发送过来的数据*/@OnMessagepublic void incoming(String message) {// Never trust the client//sendByIp("10.104.5.51","only to the first");System.out.println(random+":"+message);broadcast(message);}/*发生了异常自动执行*/@OnErrorpublic void onError(Throwable t) throws Throwable {}/*广播:遍历客户端集,发送消息,注意发送要用的session,用session.getBasicRemote().sendText(msg)发送消息*/public static void broadcast(String msg) {for (WebSocket client : connections) {//遍历所有try {//如果这个client已经在线synchronized (client) {client.session.getBasicRemote().sendText(msg);//发送消息}} catch (IOException e) {//如果这个client不在线connections.remove(client);try {client.session.close();} catch (IOException e1) {// Ignore}}}}}

我没啥文化,,来求助大家了. 古代的,现在的. 都行

zhangx的技术小站

相关文章:

你感兴趣的文章:

标签云: