spring-boot-starter-websocket入门

理解 1 有些浏览器不支持或一些限制代理可以阻止http协议开启websocket;也有可能因为websocket打开过久自动关闭它 所以Spring Framework提供了基于SockJS协议的透明后备方案。 这些方案可以通过配置启用,不需要修改应用程序;

    2 Spring Framework 4 包括一个新的spring-messaging 模块,其中包含Spring Integration项目的关键抽象,如Message,MessageChannel,MessageHandler等,可以作为这样的消息架构的基础。 该模块还包括一组用于将消息映射到方法的注释,类似于基于Spring MVC注释的编程模型。

后端实现:

@ServerEndpoint("/WebSocketServer")

public class ServerEndPoint808

{

@OnOpen

public void start(Sessionsession)

{

System.out.println("连接成功! " +session.getId());

}

@OnMessage

public void reMessage(Session session, Stringstr)

{

try

{

session.getBasicRemote().sendText(str+ " who areyou");

}

catch (IOExceptione)

{

e.printStackTrace();

}

}

@OnError

public void error(Session session, Throwablet){t.printStackTrace();}

@OnClose

public void close(){}

这个类作为WebSocket的一个服务端,@ServerEndpoint("/push")的annotation注释端点表示将WebSocket服务端运行在ws://[Server端IP或域名]:[Server端口]/项目/WebSocketServer的访问端点(这个类必须要有公共无参构造函数)

注意事项:  @serverendpoint 其中value是必须参数 subprotocols  encoder decoder configurator(后三个都是继承或实现接口再将完整类名作为参数值)

                 在一个端点类中,至多可以为三个方法标注@OnMessage注解       

               由于websocket的协议与Http协议是不同的,导致无法直接拿到session 可以添加@weblistener类实现ServletRequestListener 接口 重写modifyHandshake方法"((HttpServletRequest) sre.getServletRequest()).getSession()"

                If you have to send messages thatare not responses, store the Session object as an instance variableof the endpoint class in the method annotated with@OnOpen

               session可以basic与async两种remote变量 再调用变量的sendObject方法发送数据

 

前端实现:

<script type="text/javascript">
            var socket;
            if(typeof(WebSocket) == "undefined") {
                alert("您的浏览器不支持WebSocket");
                return;
            }

            $("#btnConnection").click(function() {
                //实现化WebSocket对象,指定要连接的服务器地址与端口
                socket = new WebSocket("ws://192.168.1.2:8888");
                //打开事件
                socket.onopen = function() {
                    alert("Socket 已打开");
                    //socket.send("这是来自客户端的消息" + location.href + new Date());
                };
                //获得消息事件
                socket.onmessage = function(msg) {
                    alert(msg.data);
                };
                //关闭事件
                socket.onclose = function() {
                    alert("Socket已关闭");
                };
                //发生了错误事件
                socket.onerror = function() {
                    alert("发生了错误");
                }
            });
            
            //发送消息
            $("#btnSend").click(function() {
                socket.send("这是来自客户端的消息" + location.href + new Date());
            });
            
            //关闭
            $("#btnClose").click(function() {
                socket.close();
            });
        </script>

参考地址:

http://www.cnblogs.com/best/archive/2016/09/12/5695570.html

https://blog.csdn.net/zlxls/article/details/78504591

https://blog.csdn.net/zilaike/article/details/78227810

以上是原生的WebSocket使用

stomp支持下的websocket:

https://www.cnblogs.com/myitroad/p/www.cnblogs.com/myitroad/p/9334141.html

https://www.cnblogs.com/GoodHelper/p/7078381.html

http://blog.geekidentity.com/spring/spring_websocket_translation/

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值