websocket

websocket能干啥?让客户端与服务器保持长连接,在连接过程中双方可相互通讯。就有如视图serversocket建立tcp通讯一样。websocket让双方保持长连接的相互通讯。平常是,请求服务器,服务器响应数据。现在可以双方进行长连接通讯了

 

引入websocket的实现,javax.websocket.api:获得引入其他jar,比如Tomcat-websocket通过其他jar对javax.websocket.api依赖,来引入websocket依赖。总之将依赖jar放进来

 

前端JS部分:

<script>
    var websocket;
    if ('WebSocket' in window) {
        websocket = new WebSocket("ws://localhost:8080/webSocketServer/zhangsan");
    } else {
        console.log("不支持websocket");
    }
    window.onbeforeunload = function (ev) {
        console.log("准备关闭连接")
        websocket.close();
    }
    websocket.onmessage = function (ev) {
        console.log("收到服务器消息: " + ev.data)
    }
    websocket.onerror = function (ev) {
        console.log("出现异常")
    }
    websocket.onopen = function (ev) {
        console.log("连接建立成功")
    }
</script>

判断window对象是否支持websocket,判断浏览是否支持。

如果之处,使用websocket的url对服务器发起请求,ws://ip:port/uri/paramter。协议以ws开头,服务器的地址,服务器的接收者,带给服务器的参数。使用这个url去连接服务器。

 

onOpen,当与服务器建立连接时触发

onError,当发生异常时触发

onMessage ,当收到服务器的消息时触发

onbeforeunload ,浏览器要关闭前触发

 

加载到script时,就去判断支不支持websocket,支持就去实例化websocket对象,构造器传websocket地址,此时就可以在构造对象时去连接websocket服务器了。然后给window注册websocket的事件事件。

 

写个输入框与按钮,注册事件。点击时触发事件,websocket.send()给服务器发送信息。填写内容,点击按钮,触发事件。使用websocket的send发出消息。在之前就与服务器建立长连接,现在就可以进行发送了

 

websocket服务器:

这注解都在是javax包下的websocket包下。@ServerEndpoint给websocket定义服务器,当访问这个uri就是请求这个服务了。后面是参数,参数只是一个标识,有需要就带,没需要就不需要,{name}使用{}包裹参数,当请求时,请求uri:websocketServer/后面就是参数了

 

这里集合是存储对象,session是当客户端与服务器建立连接时,将产生这样一个会话对象。这个对象就是服务器与客户端的联系纽带。name只是个表示,根据实际情况而定。这里面封装对象还是干什么,都根据实际情况

 

@OnOpen,当与客户端打开建立连接时,触发。写上这个注解,建立连接就会调用这个方法。@PathParam这个是从路径上分割出uri后面的参数。如果没有这个注解,就是报错。因为这个参数他不知道给啥。所以使用注解表示这个是取后面的参数的,这个后面的参数指客户端请求服务器时的url上的uri后面的参数,也就是之前的@ServerEndpoint后面的name从这个分割出来。后面是session是创建连接时自己创建的会话对象,会给我们塞入进来。

 

当客户与服务器建立连接时,将走入到@OnOen小的方法,我们能获得session对象。保存在对象上。@onMessage当客户发送消息时,我们就收到消息,那么就触发执行这个方法,一个是message内容,一个是session,内容就是客户端发送时send里面的内容获得。

 

session.getAsyncRemote从session会话中,取得这端。什么意思呢?从session对象获得到连接,获得到对象的那一端连接,就像socket一样获得连接,获得到流sendText发送信息。我们这里就是,客户与服务器建立连接,然后又取得客户端的流,等于是客户自己给自己发送,不过这个过程经过websocket中转了一下。毕竟是个测试,通了就OK

 

@onClose当连接关闭时触发,一般是客户端断开连接。@OnError发送异常时触发。

 

刚加载页面时,则就解析到script,支持websocket,根据URL连接服务器,后面的name在之前就定死了。ws://ip:port/websocketserver/zhangsan。已经张name写死了。消息也是,发送的是xxhh,而不是定义内容,这样简单一点。所以发送的消息是xixihaha

 

服务器知道客户端来连接,双方建立连接,onOpen建立连接触发,onMessage收到消息触发。期间都有session会话对象。获得到客户端端也就是流,然后将消息又发了回去,客户端收到了自己给服务器发的消息xixihaha

 

websocket就完成了,其注解都是在javax包下。为什么写上注解就能执行到我注解下的方法?获得到类,class构造类获得类的所有方法又获得所有注解。判断方法上的注解,如果有匹配的注解,则调用这个方法。这就等于是,反射类获得类的构造去调用,或是其他做法,仅是自己一时的想法。websocket就使用完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值