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://”