适合初学者的websocket示例

通过websocket,前后台只要建立一次连接,后台就可以不停的向前台推送消息。摆脱了前台一遍遍轮询的烦恼,其乐无穷~~

这里就是一个简单的websocket实现没什么高深的技能,适合初学者。

前台js:


var websocket = null;
$(function(){
    var params = "参数";
    var ip = '165.152.0.1:8080';     //websocket服务器的地址
    var path = "/WS/test/"+params;        //项目路径+参数
    var uri= location.protocol ==='https:' ? 'wws://' : 'ws://';
    var url = uri + ip + path;

    if('WebSocket' in window){   //判断浏览器是否支持websocket
        websocket = new ReconnectingWebSocket(url);
        websocket.debug=true;
    }else{
        alert('浏览器不支持websocket!');
    }

    //连接错误的回调方法
    websocket.onerror = function() {
	    console.log('websocket连接出错!');
    }

    //连接成功的回调方法
    websocket.onopen = function() {
	    console.log('websocket连接成功!');
    }

    //连接关闭的回调方法
    websocket.onclose = function() {
	    console.log('websocket连接关闭!');
    }

    //接收到消息的回调方法
    websocket.onmessage = function(event){
        var data = event.data;
        console.log('websocket服务器推送的数据:'+data);
    } 

    //当窗口关闭时,主动去关闭websocket连接
	window.onbeforeunload = function() {
	    websocket.close();
	}
});

//发送数据
function send(){
    var mes = "要发送的数据";
    websocket.send(mes);
}

websocket服务器:新建一个Javaweb项目,

/**
 * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
 * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
 * {userName}传递参数
 */
@ServerEndpoint("/test/{userName}")
public class WebSocketServer {
	static Map<Session, String> map = new HashMap<Session, String>();

    @OnOpen
    public void OnOpen(@PathParam("userName")String userName,Session session) {
    	System.out.println(userName);
    	map.put(session, userName);
        System.out.println("OnOpen()方法被执行...");
        System.out.println("websocket连接建立成功...");
    }

    /**
     * 连接关闭的方法
     */
    @OnClose
    public void OnClose(Session session) {
    	if (map.containsKey(session)) {
    		map.remove(session);
       }
        System.out.println("OnClose()方法被执行...");
        System.out.println("websocket连接已经关闭...");
    }

    /**
     * 接收消息的方法
     * @param msg
     * @param session
     * @throws InterruptedException 
     */
    @OnMessage
    public void OnMessage(String msg, Session session) throws InterruptedException {
        System.out.println("已从客户端接收消息:" + msg);

        System.out.println("向客户端发送数据完毕...");
    }

	/**
     * 出错的方法,注意参数不能错
     * @param session
     * @param error
     */
    @OnError
    public void OnError(Session session,Throwable error) {
    	if (map.containsKey(session)) {
    		map.remove(session);
		}
        System.out.println("OnError()方法被执行...");
        System.out.println("websocket出错...");
    }
    
    /**
     * 推送数据的方法
     * @param session map里存的登录信息
     * @param message 推送数据
     */
    public void sendMessage(Session session,String message){
		try {
			session.getBasicRemote().sendText(message);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}

我这里的websocket服务器是jdk1.7 Tomcat7,别的服务器好像是有问题。

websocket需要的jar包:https://download.csdn.net/download/qq_39731741/10721221

无意中发现一篇文章,也是讲websocket的,感觉比我的简洁,你们可以看一下:https://blog.csdn.net/liu857279611/article/details/70157012

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章