我用的是Spring MVC(4.2.2.RELEASE)和Tomcat 8。我的要求是向浏览器发送一个通知。请找到下面的代码。
控制器-------------------@Controller公共类MessageController{/@Autowired private SimpMessageTemplate模板;@Autowire private SimpMessageSendingOperations模板;列表noteList=new ArrayList();
public MessageController() {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
//@SubscribeMapping("/topic/notify")
//@SendToUser("/topic/notify")
public void sendMessage(String msg){
Notification note = new Notification();
note.setMsg(msg);
noteList.add(note);
template.convertAndSend("/topic/price", noteList);
}
}
Configuration
---------------
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/queue","/topic");
}
}
Client code
---------
var socket = new SockJS("/intl-fcstone/ws");
var stompClient = Stomp.over(socket);
var connectCallback = function() {
console.log('----inside connectCallback before----');
stompClient.subscribe('/topic/price', notifyUser);
console.log('----inside connectCallback after----');
};
var errorCallback = function(error) {
console.log('----inside errorCallback----');
alert(error.headers.message);
};
stompClient.connect("guest", "guest", connectCallback, errorCallback);
function notifyUser(frame) {
console.log('----inside notifyUser1----'+frame);
console.log('----inside notifyUser2----'+frame.body);
var notes = JSON.parse(frame.body);
console.log('----inside notifyUser3----'+notes);
if(notes !=''){
var $messageDiv = $('#notification_div'); // get the reference of the div
$messageDiv.show().html(notes);
}
Chrome console
---------------
Opening Web Socket...
stomp.js:134 Web Socket Opened...
stomp.js:134 >>> CONNECT
login:guest
passcode:guest
accept-version:1.1,1.0
heart-beat:10000,10000
stomp.js:134 <<< CONNECTED
version:1.1
heart-beat:0,0
user-name:suppliersin@gmail.com
stomp.js:134 connected to server undefined
(index):159 ----inside connectCallback before----CONNECTED
user-name:suppliersin@gmail.com
heart-beat:0,0
version:1.1
stomp.js:134 >>> SUBSCRIBE
id:sub-0
destination:/topic/price
(index):161 ----inside connectCallback after----CONNECTED
user-name:suppliersin@gmail.com
heart-beat:0,0
version:1.1
---------------------------
after this, nothing happens.
http://localhost:8080/intl-fcstone/ws/info shows
{
entropy: -646614392,
origins: [
"*:*"
],
cookie_needed: true,
websocket: true
}
Any help on this is much appreciated.
此问题已得到解决。我在上下文中添加了一些行.xml
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/ws">
<websocket:handshake-interceptors>
<bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor" />
</websocket:handshake-interceptors>
<websocket:sockjs session-cookie-needed="true" />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic, /queue" />
<websocket:client-inbound-channel>
<websocket:executor core-pool-size="50"
max-pool-size="100" keep-alive-seconds="60" />
</websocket:client-inbound-channel>
<websocket:client-outbound-channel>
<websocket:executor core-pool-size="50"
max-pool-size="100" keep-alive-seconds="60" />
</websocket:client-outbound-channel>
<websocket:broker-channel>
<websocket:executor core-pool-size="50"
max-pool-size="100" keep-alive-seconds="60" />
</websocket:broker-channel>
</websocket:message-broker>
并使用
@Autowired private SimpMessageSendingOperations template;
在我的控制器中。我也用了
template.convertAndSendToUser(authentication.getName(), "/queue/price", noteList);
其向特定用户发送通知。
最后,在客户端
user = frame.headers['user-name'];
stompClient.connect(user, user, connectCallback, errorCallback);
请关注这个Spring的网络口袋
通过选择,,和,我创建了一个全新的Spring初始化项目。 我做了一个小项目: 我试着将三个人保存到数据库中。保存方法只返回需要执行的Mono。如果我尝试通过简单的订阅来执行它,一切都很好: 但是,当我使用而不是时,应用程序挂起: 如果我手动查询数据库,我会看到Jim已被保存,但Jack和John未被保存。 这是窃听器,还是我做错了什么?我希望在代码进一步发展之前保证用户在数据库中,所以我真的很想
我正在尝试让Spring WebSocket(Spring 4)在我一直在做的项目中工作。到目前为止,我已经打开了WebSocket,添加了订阅者并发送了消息。 从昨天开始,我一直在试图弄清楚为什么我的endpoint不处理HTML中包含的stomp客户端发送的消息。控制台中实际上也没有错误(好吧,我不完全确定这里的“连接到服务器未定义”是什么意思)。 以下是Chrome控制台的输出: 这是我的代
我有一个websocket服务器和一个websocket客户端,都是Java的。websocket服务器具有以下功能: 在 Java 网页滑板客户端中,我在我的踩踏会话处理程序中提供了以下内容: 然后,我能够通过客户端向服务器路径“hello”发送消息来在两者之间进行通信,然后由于客户端订阅了“topic/greetings”,所以我也要用我的stompFrameHandler来处理响应。 但是我
我正在开发一个利用websockets功能的Spring应用程序。为了使它更健壮,我使用了STOMP/SimpleBrokerMessageHandler,如文档中所述。一切进展顺利,我已经能够非常快速地连接javasctipt客户端,所以我转而使用“AndroidSync”库在Android客户端上工作。 我发现的事实是,Android客户端(我想其他客户端也是如此)在服务器处理订阅请求后没有收
我正在尝试编写一个Spring服务,它订阅一个外部只读STOMP代理,并读取/处理它发布的消息。 铁路公司将消息推送到主题“/topic/TRAIN\u MVT\u ALL\u TOC”。我可以成功地连接到主题,但似乎无法将侦听器实例化为其消息。 我已经设置了一个Spring@Configuration类来连接它,在运行应用程序之后,它似乎连接正确。 我还创建了消息处理例程,使用@Message映
问题内容: 我一直在尝试可以在网上找到的所有内容,但没有任何效果。希望大家能看到新的问题。这是我第一次使用ActionCable,在本地一切正常,但是当推送到heroku时。我的日志没有像我的开发服务器那样显示任何可操作的订阅: 在发送消息时,我确实看到了,但没有将它们追加,这是在猜测是否意味着未访问/调用该方法? 我确实在heroku的日志中注意到它说,开发人员正在localhost:3000监