《Spring实战》摘录 - 27

2019-08-15 18:21:54 浏览数 (1)

271

Q: #17.3.3-1 | RabbitMQ连接工厂的作用是创建到RabbitMQ的连接

A: 如果你希望通过RabbitMQ发送消息,那么你可以将connectionFactorybean注入到AlertServiceImpl类中,并使用它来创建Connection,使用这个Connection来创建Channel,然后使用这个Channel发布消息到Exchange上

272

Q: #18.0-1 | 全双工意味着服务器可以发送消息给浏览器,浏览器也可以发送消息给服务器。Spring 4.0为WebSocket通信提供了支持,包括

A:

  • 发送和接收消息的低层级API;
  • 发送和接收消息的高级API;
  • 用来发送消息的模板;
  • 支持SockJS,用来解决浏览器端、服务器以及代理不支持WebSocket的问题。

273

Q: #18.1-1 | WebSocket是两个应用之间全双工的通信通道

A:

274

Q: #18.1-2 | MarcoHandler处理通过WebSocket传送的文本消息

A:

代码语言:javascript复制
package marcopolo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.AbstractWebSocketHandler;

public class MarcoHandler extends AbstractWebSocketHandler{
    private static final Logger logger = LoggerFactory.getLogger(MarcoHandler.calss);
    
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception{//处理文本消息
        logger.info("Received message: "   message.getPayload());

        Thread.sleep(2000);//模拟延时

        session.sendMessage(new TextMessage("Polo!"));//发送文本消息
    }
}

275

Q: #18.1-3 | 除了重载WebSocketHandler中所定义的五个方法以外,我们还可以重载AbstractWebSocketHandler中所定义的三个方法:

A:

  • handleBinaryMessage()
  • handlePongMessage()
  • handleTextMessage()

276

Q: #18.1-4 | 可以重载afterConnectionEstablished()和afterConnectionClosed(),来建立或关闭连接,的代码片段

A:

代码语言:javascript复制
public void afterConnectionEstablished(WebSocketSession session)
    throws Exception {
  logger.info("Connection established");
}


@Override
public void afterConnectionClosed(
    WebSocketSession session, CloseStatus status) throws Exception {
  logger.info("Connection closed. Status: "   status);
}

277

Q: #18.1-5 | 借助websocket命名空间以XML的方式配置WebSocket

A:

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:websocket="http://www.springframework.org/schema/websocket"
    xsi:schemaLocation="
        http://www.springframework.org/schema/websocket
        http://www.springframework.org/schema/websocket/spring-websocket.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <websocket:handlers>
        <websocket:mapping handler="marcoHandler" path="/marco" /> //将Marco Handle映射到“/marco”
    </websocket:handlers>

    <bean id="marcoHandler" class="marcopolo.MarcoHandler" /> //声明MarcoHandler bean
</beans>

278

Q: #18.1-6 | 连接到“marco” WebSocket的JavaScript客户端

A:

代码语言:javascript复制
var url='ws://'   window.location.host   '/websocket/marco';
var sock = new WebSocket(url);//打开WebSocket

sock.onopen = function(){//处理连接开启事件
    console.log('Opening');
    sayMarco();
};

sock.onmessage = function(e){//处理信息
    console.log('Received message: ', e.data);
    setTimeout(function(){sayMarco()}, 2000);
}

sock.onclose = function(){//处理连接关闭事件
    console.log('Closing');
}

function sayMarco(){
    console.log('Sending Marco!');
    sock.send("Marco!");//发送消息
}

在本例中,URL使用了“ws://”前缀,表明这是一个基本的WebSocket连接。如果是安全WebSocket的话,协议的前缀将会是“wss://”。

279

Q: #18.2-1 | cdn,是什么?

A: 内容分发网络(英语:Content delivery network或Content distribution network,缩写:CDN)是指一种透过互联网互相连接的计算机网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、影片、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。

280

Q: #18.2-2 | SockJS所处理的URL是

A: 是“http://”或“https://”模式,而不是“ws://”和“wss://”

0 人点赞