spring websocket在集群下怎么实现
1个回答
2016-10-24 · 知道合伙人软件行家
关注
展开全部
通过上面的原理分析可以知道,需要发送到后台的数据很简单,就是用户信息,聊天信息,和所在的空间信息,因为是一个简单的例子,所以bean就设计的比较简单了:
[java] view plain copy
public class UserChatCommand {
private String name;
private String chatContent;
private String coordinationId;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getChatContent() {
return chatContent;
}
public void setChatContent(String chatContent) {
this.chatContent = chatContent;
}
public String getCoordinationId() {
return coordinationId;
}
public void setCoordinationId(String coordinationId) {
this.coordinationId = coordinationId;
}
@Override
public String toString() {
return "UserChatCommand{" +
"name='" + name + '\'' +
", chatContent='" + chatContent + '\'' +
", coordinationId='" + coordinationId + '\'' +
'}';
}
}
通过这个bean来接收到web端发送的消息,然后在服务端转发,接下来就是转发的逻辑了,不过首先需要介绍一下Spring WebSocket的一个annotation。
spring mvc的controller层的annotation是RequestMapping大家都知道,同样的,WebSocket也有同样功能的annotation,就是MessageMapping,其值就是访问地址。现在就来看看controller层是怎么实现的吧:
[java] view plain copy
/**
* WebSocket聊天的相应接收方法和转发方法
*
* @param userChat 关于用户聊天的各个信息
*/
@MessageMapping("/userChat")
public void userChat(UserChatCommand userChat) {
//找到需要发送的地址
String dest = "/userChat/chat" + userChat.getCoordinationId();
//发送用户的聊天记录
this.template.convertAndSend(dest, userChat);
}
怎么这么简单?呵呵,能够这么简单的实现后台代码,全是Spring的功劳。首先,我们约定好发送地址的规则,就是chat后面跟上之前发送过来的id,然后通过这个“template”来进行转发,这个“template”是Spring实现的一个发送模板类:SimpMessagingTemplate,在我们定义controller的时候,可以在构造方法中进行注入:
[java] view plain copy
@Controller
public class CoordinationController {
......
//用于转发数据(sendTo)
private SimpMessagingTemplate template;
<pre name="code" class="java"> @Autowired
public CoordinationController(SimpMessagingTemplate t) {
template = t;
}
.....
}
[java] view plain copy
public class UserChatCommand {
private String name;
private String chatContent;
private String coordinationId;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getChatContent() {
return chatContent;
}
public void setChatContent(String chatContent) {
this.chatContent = chatContent;
}
public String getCoordinationId() {
return coordinationId;
}
public void setCoordinationId(String coordinationId) {
this.coordinationId = coordinationId;
}
@Override
public String toString() {
return "UserChatCommand{" +
"name='" + name + '\'' +
", chatContent='" + chatContent + '\'' +
", coordinationId='" + coordinationId + '\'' +
'}';
}
}
通过这个bean来接收到web端发送的消息,然后在服务端转发,接下来就是转发的逻辑了,不过首先需要介绍一下Spring WebSocket的一个annotation。
spring mvc的controller层的annotation是RequestMapping大家都知道,同样的,WebSocket也有同样功能的annotation,就是MessageMapping,其值就是访问地址。现在就来看看controller层是怎么实现的吧:
[java] view plain copy
/**
* WebSocket聊天的相应接收方法和转发方法
*
* @param userChat 关于用户聊天的各个信息
*/
@MessageMapping("/userChat")
public void userChat(UserChatCommand userChat) {
//找到需要发送的地址
String dest = "/userChat/chat" + userChat.getCoordinationId();
//发送用户的聊天记录
this.template.convertAndSend(dest, userChat);
}
怎么这么简单?呵呵,能够这么简单的实现后台代码,全是Spring的功劳。首先,我们约定好发送地址的规则,就是chat后面跟上之前发送过来的id,然后通过这个“template”来进行转发,这个“template”是Spring实现的一个发送模板类:SimpMessagingTemplate,在我们定义controller的时候,可以在构造方法中进行注入:
[java] view plain copy
@Controller
public class CoordinationController {
......
//用于转发数据(sendTo)
private SimpMessagingTemplate template;
<pre name="code" class="java"> @Autowired
public CoordinationController(SimpMessagingTemplate t) {
template = t;
}
.....
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询