websocket

1、基础概念说明

STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。

2、websocket实现方式

1)、tomcat的websocket

案例:在apache-tomcat-8.0.24\webapps\examples\websocket目录下存在多个websocket案例

向客户端推送消息:

    public static void broadcast(String msg) {
        for (ChatAnnotation client : connections) {
            try {
                synchronized (client) {
                    client.session.getBasicRemote().sendText(msg);
                }
            } catch (IOException e) {
                log.debug("Chat Error: Failed to send message to client", e);
                connections.remove(client);
                try {
                    client.session.close();
                } catch (IOException e1) {
                    // Ignore
                }
                String message = String.format("* %s %s",
                        client.nickname, "has been disconnected.");
                broadcast(message);
            }
        }
    }
调用方法是类方法调用

2)、spring的websocket

服务器端代码解释

1、controller

@Controller
public class GreetingController {

    //指定该方法处理指定路径的消息
    @MessageMapping("/hello")
    //发送消息到指定的客户端路径
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(1000); // simulated delay
        return new Greeting("Hello, " + message.getName() + "!");
    }
}
2、配置

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        //指定代理处理路径为topic的客户端消息
        config.enableSimpleBroker("/topic");
        //在客户端消息的路径上加上前缀app
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        //websocket的一开始的握手交互需要借助HTTP请求完成
        //该处的作用是注册名字为"gs-guide-websocket"的websocket终端,启用sockJS后备选项,
	//sockJS将尝试联系gs-guide-websocket,并使用最佳交互方法(websocket, xhr-streaming, xhr-polling等方法)
        registry.addEndpoint("/gs-guide-websocket").withSockJS();
    }

}
3、前端js

var stompClient = null;

//设置按钮的连接状态
function setConnected(connected) {
    $("#connect").prop("disabled", connected);
    $("#disconnect").prop("disabled", !connected);
    if (connected) {
        $("#conversation").show();
    }
    else {
        $("#conversation").hide();
    }
    $("#greetings").html("");
}

function connect() {
	//新建一个socket并连接gs-guide-websocket服务端口
    var socket = new SockJS('/creepers/gs-guide-websocket');
    //使用stomp协议进行交互封装
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
    	//设置按钮的连接状态
        setConnected(true);
        //在控制台打印链接状态
        console.log('Connected: ' + frame);
        //开启客户端的端口服务,并指定收到信息所执行的动作
        stompClient.subscribe('/topic/greetings', function (greeting) {
            showGreeting(JSON.parse(greeting.body).content);
        });
    });
}

//断开连接
function disconnect() {
    if (stompClient != null) {
        stompClient.disconnect();
    }
    setConnected(false);
    console.log("Disconnected");
}

function sendName() {
	//指定消息需要发送到的服务器的服务端口
    stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));
}

function showGreeting(message) {
    $("#greetings").append("<tr><td>" + message + "</td></tr>");
}

//绑定函数到指定的组件
$(function () {
    $("form").on('submit', function (e) {
        e.preventDefault();
    });
    $( "#connect" ).click(function() { connect(); });
    $( "#disconnect" ).click(function() { disconnect(); });
    $( "#send" ).click(function() { sendName(); });
});




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值