Js WebScoket与Java WebSocket的通信

来源:互联网 发布:iapp源码大全 编辑:程序博客网 时间:2024/06/01 10:35
    不喜欢说废话,直接上代码←←    在myeclise里面新建一个项目,项目名命名为websocke,请使用java ee7.0或以上web环境。    1,在WebRoot下新建一个demo.html,其内容如下:
<!DOCTYPE html><html>    <head>        <style>            #content{width:600px;height:200px;}        </style>        <meta charset="utf-8"/>    </head>    <body id="body">        <textarea id="content" rows="40" cols="500"></textarea>        <div class="btn">            <input type="button" value="清空" onclick="reset()"/>            <input type="button" value="发送" onclick="send()">        </div>        <script type="text/javascript">            var socket = new WebSocket('ws://127.0.0.1:80/websocket/ws');             //创建Socket             socket.onopen = function(event) {               //向服务器发送数据              //socket.send('哈哈哈哈');               //接收数据事件              socket.onmessage = function(event) {                body.innerHTML+="<br/>对方:"+event.data;              };               // socket关闭事件              socket.onclose = function(event) {                body.innerHTML+="<br/>系统:已和服务器断开连接!!!";              };               //关闭socket              //socket.close()            };            //-----------            var body=document.getElementById("body");            function send(){                var msg=document.getElementById("content").value;//获取输入框内容                socket.send(msg);//发送消息                reset();//清空输入框                body.innerHTML+="<br/>我:"+msg;            }            function reset(){                document.getElementById("content").value="";            }        </script>    </body></html>

js代码已经包含在这个html中,其中已经展示了js WebSocket的各种基本用法;

2,在src下新建一个action包,在action包里面新建一个WSServer类,其内容如下:

package action;import java.io.IOException;import javax.websocket.CloseReason;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;//@ServerEndpoint注解中的内容是用户客户端websocket的连接url,例如ws://127.0.0.1:80/websocket/ws,//结构形式为“ws://ip:端口/项目名/指定的url”@ServerEndpoint("/ws")public class WSServer {    private Session session;    //连接打开时执行    @OnOpen    public void onOpen(Session session) {        this.session=session;        System.out.println("一个客户端连接进来了 ... 它的sessionid是:" + session.getId());    }    //收到消息时执行    @OnMessage    public void onMessage(String message, Session session) {        System.out.println(session.getId()+"客户端发送的消息是:"+message);        try{            this.sendMessage(message);//消息发回给客户端        }catch(Exception e){            e.printStackTrace();        }        //return currentUser + ":" + message;如果有返回值,则客户端发送消息后会收到这个返回值    }    //连接关闭时执行    @OnClose    public void onClose(Session session, CloseReason closeReason) {        System.out.println("一个客户端关闭了,它的sessionid是:" + session.getId());    }    //连接错误时执行    @OnError    public void onError(Throwable t) {        t.printStackTrace();    }    //自定义的方法,用于发送消息    public void sendMessage(String message) throws IOException{        this.session.getBasicRemote().sendText(message);        //this.session.getAsyncRemote().sendText(message);    }}

这是java WebSocket建立服务端的方式,主要是通过注解去设定各种事件,每当有一个客户端连接进来,就会产生一个WSServer的对象实例,如果要用于多客户端的通信(如群聊),那么在@onOpen事件中应该收集好连接进来的客户端产生的实例以便于消息的转发。
部署这个简单的项目到tomcat,然后开启tomcat服务器,通过浏览器访问demo.html就可以感受WebSocket的通信了。注意,楼主代码里面tomcat使用的是80端口,不是80端口的读者请自行修改代码。
代码有不懂的读者可以留言评论,但不一定会收到回复←←。