@RestController
public class GreetingController {
@Autowired
private SimpMessageSendingOperations simpMessageSendingOperations;
@MessageMapping("/hello") //"/hello"为WebSocketConfig类中registerStompEndpoints()方法配置的
@SendTo("/topic/greetings")
public void greeting(@Header("atytopic") String topic, @Headers Map<String, Object> headers) {
System.out.println("connected successfully....");
System.out.println(topic);
System.out.println(headers);
}
/**
* 这里用的是@SendToUser,这就是发送给单一客户端的标志。本例中,
* 客户端接收一对一消息的主题应该是“/user/” + 用户Id + “/message” ,这里的用户id可以是一个普通的字符串,只要每个用户端都使用自己的id并且服务端知道每个用户的id就行。
* @return
*/
@MessageMapping("/message")
@SendToUser("/message")
public Greeting handleSubscribe() {
System.out.println("this is the @SubscribeMapping('/marco')");
return new Greeting("I am a msg from SubscribeMapping('/macro').");
}
/**
* 测试对指定用户发送消息方法
* @return
*/
@RequestMapping(path = "/send", method = RequestMethod.GET)
public Greeting send() {
simpMessageSendingOperations.convertAndSendToUser("1", "/message", new Greeting("I am a msg from SubscribeMapping('/macro')."));
return new Greeting("I am a msg from SubscribeMapping('/macro').");
}
Greeting类
public class Greeting {
private String content;
public Greeting(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
2.利用websocket技术利用代码实现一对多,一对一通信
Js
var websocket = null;
//判断当前浏览器是否支持WebSocket
if ('WebSocket' in window) {
var url = "ws://" + window.location.host +"/webSocket/webSocketOneToOne/1,123"
websocket = new WebSocket(url);
} else {
alert('当前浏览器 Not support websocket')
}
//连接发生错误的回调方法
websocket.onerror = function() {
setMessageInnerHTML("WebSocket连接发生错误");
};
//连接成功建立的回调方法
websocket.onopen = function() {
setMessageInnerHTML("WebSocket连接成功");
}
//接收到消息的回调方法
websocket.onmessage = function(event) {
console.log("回调信息",event.data)
setMessageInnerHTML(event.data);
}
//连接关闭的回调方法
websocket.onclose = function() {
setMessageInnerHTML("WebSocket连接关闭");
}
//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
window.onbeforeunload = function() {
closeWebSocket();
}
//将消息显示在网页上
function setMessageInnerHTML(innerHTML) {
document.getElementById('message').innerHTML += innerHTML + '<br/>';
}
//关闭WebSocket连接
function closeWebSocket() {
websocket.close();
}
//发送消息
function send() {
var message = document.getElementById('text').value;
//message作为发送的信息,role作为发送的对象标识,socketId是此次会话的标识
websocket.send(JSON.stringify({'message':message,'role':'2','socketId':"123"}));
}