Spring 弹簧靴座和带网套的角2(踩在袜子上)
是否可以在没有MVC的情况下使用stomp over sockjs。所以我希望在tomcat中有SpringREST接口,并由express运行angular2应用程序 WebSocketConfig.javaSpring 弹簧靴座和带网套的角2(踩在袜子上),spring,tomcat,angular,stomp,sockjs,Spring,Tomcat,Angular,Stomp,Sockjs,是否可以在没有MVC的情况下使用stomp over sockjs。所以我希望在tomcat中有SpringREST接口,并由express运行angular2应用程序 WebSocketConfig.java @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// the endpoint for websocket connections
registry.addEndpoint("/portfolio").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.setApplicationDestinationPrefixes("/app");
config.enableSimpleBroker("/topic");
}
}
@Controller
public class SocketController {
@Autowired
private SimpMessagingTemplate template;
public SocketController() {
int a = 5;
}
@MessageMapping("/greeting")
public String handle(String greeting) {
return "[" + "greeting" + ": " + greeting;
}
}
SocketController.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// the endpoint for websocket connections
registry.addEndpoint("/portfolio").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.setApplicationDestinationPrefixes("/app");
config.enableSimpleBroker("/topic");
}
}
@Controller
public class SocketController {
@Autowired
private SimpMessagingTemplate template;
public SocketController() {
int a = 5;
}
@MessageMapping("/greeting")
public String handle(String greeting) {
return "[" + "greeting" + ": " + greeting;
}
}
和打字脚本代码:
。
.
.
。
.
。
.
但由于某种原因,这是行不通的。。在控制台中,我得到输出:
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
stomp.js:134 connected to server undefined
activity-socket.ts:17 Connected: CONNECTED
heart-beat:0,0
version:1.1
{“name”:“kitica”}
但消息永远不会回到订户
angular2位于端口8001上,spring rest位于8080上。我在使用stomp over SockJs与Java spring boot后端的angular2客户机时遇到了一些问题。以下是我所做的工作: 在角度方面: 找不到this.stompClient.subscribe,请将“this”绑定到“that” 在Java服务器端: 您的控制器需要一个注释,说明返回值的位置,如下所示: 根据你的消息代理
希望这有点帮助 令人困惑的是,我使用的是spring boot rest,而不是从tomcat容器中以静态方式提供angular2,我在webpack下有angular2,所以我一直在尝试订阅并发送到相对URL 正确的做法是:
import {Component} from '@angular/core';
import {ActivityService} from '../common/services';
import {MaterializeDirective} from 'angular2-materialize';
import {LarsActionButtonComponent} from '../common/components';
var SockJS = require('sockjs-client');
var Stomp = require('stompjs');
@Component({
selector: 'activity',
providers: [ActivityService],
directives: [MaterializeDirective, LarsActionButtonComponent],
templateUrl: 'app/activity/activity.html'
})
export class Activity {
stompClient: any;
activityId: any;
text: any;
messages: Array<String> = new Array<String>();
constructor() {
}
send() {
this.stompClient.send('/app/hello/' + this.activityId, {}, JSON.stringify({ 'name': this.text }));
}
connect() {
var that = this;
var socket = new SockJS('tst-rest.mypageexample/hello?activityId=' + this.activityId);
this.stompClient = Stomp.over(socket);
this.stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
that.stompClient.subscribe('/topic/greetings/' + that.activityId, function (greeting) {
that.messages.push(JSON.parse(greeting.body).content);
});
}, function (err) {
console.log('err', err);
});
}
}
配置类:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello").setAllowedOrigins("*").withSockJS();
}
}
您已将“handle()”方法值发送给订阅服务器
或者使用
SimpMessageTemplate.convertAndSend(,);
e、 g.-simpMessagingTemplate.convertAndSend(“/topic/chats”,message.getMessage())
或
@处理程序方法上方的SendTo(“目标url”)。
e、 g.-@SendTo(“/topic/message”)如果你可以在JS中使用它,你可以在Angular2中使用它。我已经用我尝试过的代码示例更新了问题,这是根据他们的文档。你是如何在Angular2应用程序中添加sockJS的?如果你的问题更具体,我可以给出更合适的答案。但它是非常简单的npm安装,稍后在您的typescript文件中,您必须声明变量SockJS和Stomp。我希望这是有帮助的。编辑:参考您使用的npm库?只需“npm install stomp”就足够了吗?请看我上面的回答,它刚刚更新。你是如何在网页包中映射
sockjs客户端的
?我在package.json中只有“sockjs”:“0.3.4”,“stompjs”:“2.3.3”的,其他所有内容都已显示。@关键问题-如果我与套接字失去连接,如何自动重新连接?如果我与套接字失去连接,如何自动重新连接?@Lanou非常感谢,它解决了我的问题!
@MessageMapping("/greeting")
@SendTo("/topic/greetings")
public String handle(String greeting) {
return "[" + "greeting" + ": " + greeting;
}
import {Component} from '@angular/core';
import {ActivityService} from '../common/services';
import {MaterializeDirective} from 'angular2-materialize';
import {LarsActionButtonComponent} from '../common/components';
var SockJS = require('sockjs-client');
var Stomp = require('stompjs');
@Component({
selector: 'activity',
providers: [ActivityService],
directives: [MaterializeDirective, LarsActionButtonComponent],
templateUrl: 'app/activity/activity.html'
})
export class Activity {
stompClient: any;
activityId: any;
text: any;
messages: Array<String> = new Array<String>();
constructor() {
}
send() {
this.stompClient.send('/app/hello/' + this.activityId, {}, JSON.stringify({ 'name': this.text }));
}
connect() {
var that = this;
var socket = new SockJS('tst-rest.mypageexample/hello?activityId=' + this.activityId);
this.stompClient = Stomp.over(socket);
this.stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
that.stompClient.subscribe('/topic/greetings/' + that.activityId, function (greeting) {
that.messages.push(JSON.parse(greeting.body).content);
});
}, function (err) {
console.log('err', err);
});
}
}
@Controller
public class SocketController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
return new Greeting("Hello, " + message.getName() + "!");
}
}
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello").setAllowedOrigins("*").withSockJS();
}
}