您现在的位置:首页 >> 前端 >> 内容

WebSocket简单使用

时间:2017/2/24 22:23:00 点击:

  核心提示:WebSocket碎语最近几日对websocket研究了一下,我就介绍一下服务端基于java的websocket的基本用法吧。至于websocket是什么的,基本原理我就不废话了,百度的介绍很详细。正...

WebSocket

碎语

最近几日对websocket研究了一下,我就介绍一下服务端基于java的websocket的基本用法吧。至于websocket是什么的,基本原理我就不废话了,百度的介绍很详细。

正题

客户端(浏览器)

    var socket = new WebSocket("ws://localhost:8080/websocket");
    socket.onopen = function(){
        socket.send("i am Tanghulu");
        console.log("socket is open");
    }
    socket.onmessage = function(msg){
        console.log(msg.data);
    }
    socket.onerror = function(error){
      console.log(error);
    }

上面是创建websocket的js代码,首先建立一个WebSocket对象,在建立的过程中指定的url是服务端用来处理这个 连接的程序。当该socket顺利打开后会在控制台输出”socket is open”这句话并向服务端发送一句话”i am Tanghulu”,并且每当socket收到信息后会把信息输出到控制台,当连接发生异常的时候同样会将错误信息输出到控制台。

服务端

    import javax.websocket.OnError;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    @ServerEndpoint(value="/websocket")
    public class WebSocket{
        @OnOpen
        public void onOpen(Session session){
            System.out.println("socket is open");
        }
        @OnMessage
        public String onMessage(String msg,Session session){
            System.out.println(msg);
            return "server is received";
        }
        @OnClose
        public void onClose(){
            System.out.println("close...");
        }
        @OnError
        public void onError(Throwable error){
            System.out.println(error.getMessage());
        }
    }

这段服务端代码,和上面js代码基本差不多,都是在某一事件发生后将信息打印到控制台,服务端程序在收到消息的时候会将消息打印出来,并且返回一个字符串,这个字符串客户端会收到。

需要注意的是类的开始的标注中有个value=”/websocket”,这个指定了客户端如何定位这个服务端程序。(ws://localhost:8080/websocket),该程序需要websocket-api.jar 这个包,网上有很多资源。

关于部署

只需要将该程序直接放在你的web项目中即可,web容器会自动加载它的。

更多功能

以上介绍的是websocket如何传送字符串信息,websocket当然还可以传送二进制数据流,websocket可以直接send一个js的Blob对象或者是ArrayBuffer对象。当然在服务端接收时代码稍有变化

    @OnMessage
    public String onMessage(InputStream ips,Session session){
        //to do code ...
    }

    //或者下面的方法也可以用来接受二进制信息
    @OnMessage
    public String onBinaryMessage(byte[] byteMessage,Session session){
        //to do code ...
    }

当发送的是Blob对象的时候服务器会自动调用该方法,当然如果你定义了两个OnMessage事件方法,方法名字要不一样了!

Tags:WE EB BS SO 
作者:网络 来源:qq_3069082