websocket (html5新规范)

来源:互联网 发布:长沙理工大学网络认证 编辑:程序博客网 时间:2024/06/10 02:23
WebSocket是HTML5规定的新协议。它允许服务端向客户端实时推送新消息;当然,客户端也可以通过websocket实时向server发消息。
应用场景:聊天。user1向user2发消息,用服务器中转,那么server就要向client实时推送。

1.js部分

//建立连接var url="ws://yichudu.com/yichuMessage/websocket/chat";var webSocket = new WebSocket(url);//绑定事件webSocket.onopen=function(){/*建立连接后的操作*/}webSocket.onmessage = function(event) {/*收到信息后的操作*/}webSocket.onclose = function() {/*断开连接后的操作*/}//发送消息,以json为例webSocket.send(JSON.stringify(msg));


1.1 例子

<html><script>url='ws://localhost:7002/websocket'var webSocket = new WebSocket(url);webSocket.onopen = function() {console.log('WebSocket has been connected');webSocket.onmessage = function(event) {console.log('receive:'+event.data);}webSocket.onclose = function() {console.log('WebSocket has been disconnected。');}}</script></html>

2.server部分

需要tomcat支持,以tomcat8为例。用eclipse建立一个Dynamic Web Project。

@javax.websocket.server.ServerEndpoint
该注解作用在类上,注解的value参数指定了建立连接的URL路径。
//以该注解为例,那么真实地址就是ws://host:port/project/websocket/chat
@ServerEndpoint(value = "/websocket/chat")

@javax.websocket.OnOpen
作用在函数上,注入参数javax.websocket.Session。

@javax.websocket.OnClose
作用在函数上。

@javax.websocket.OnMessage
作用在函数上。注入参数String。
void javax.websocket.RemoteEndpoint.Basic.sendText(String text)
此函数用于发消息。

@javax.websocket.OnError

作用在函数上。注入参数Throwable。异常的时候会调用。

2.1 例子

package com.yichudu.qa.websocket;import java.io.IOException;import java.util.Set;import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;import org.apache.log4j.Logger;import org.springframework.stereotype.Component;@ServerEndpoint(value = "/websocket")public class MyWebSocket {Logger logger =Logger.getLogger(MyWebSocket.class);//静态变量,用来记录当前在线连接数。    private static int onlineCount = 0;    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。    private static Set<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>();    //与某个客户端的连接会话,需要通过它来给客户端发送数据    private Session session;    /**     * 连接建立成功调用的方法*/    @OnOpen    public void onOpen(Session session) {        this.session = session;        webSocketSet.add(this);     //加入set中        onlineCount++;        logger.info("有新连接加入!当前在线人数为" +onlineCount);        try {        sendMessage("ni hao");        } catch (IOException e) {         logger.error("IO异常");        }    }    @OnClose    public void onClose() {        webSocketSet.remove(this);  //从set中删除        onlineCount--;        logger.info("有一连接关闭!当前在线人数为" + onlineCount);    }    @OnMessage    public void onMessage(String message) {        logger.info("来自客户端"+session.getId()+"的消息:" + message);    }    @OnError    public void onError(Throwable error) {        logger.error(error);    }        void sendMessage(String text) throws IOException{    session.getBasicRemote().sendText(text);    }}


0 0