Java 使用不同的应用程序时,websocket聊天应用程序中未触发消息
我创建了一个spring引导应用程序,它保存控制器和websocket配置。为了进行测试,我在同一个应用程序中创建了html和angularjs文件 如果两个不同的用户登录。。他们可以聊天。工作正常 我用spring创建了一个web应用程序,并添加了html和angularjs页面。所以,一个用户登录web应用程序页面,另一个用户通过上一个应用程序(测试)登录并尝试聊天 web应用程序中的用户不能接收任何消息,这意味着用户通过测试页面可以接收消息 我的示例代码:Java 使用不同的应用程序时,websocket聊天应用程序中未触发消息,java,spring,websocket,Java,Spring,Websocket,我创建了一个spring引导应用程序,它保存控制器和websocket配置。为了进行测试,我在同一个应用程序中创建了html和angularjs文件 如果两个不同的用户登录。。他们可以聊天。工作正常 我用spring创建了一个web应用程序,并添加了html和angularjs页面。所以,一个用户登录web应用程序页面,另一个用户通过上一个应用程序(测试)登录并尝试聊天 web应用程序中的用户不能接收任何消息,这意味着用户通过测试页面可以接收消息 我的示例代码: package com.aghi
package com.aghil.chat.controller;
import java.security.Principal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import com.aghil.chat.dto.ChatMessageDto;
@Controller
public class ChatMessageController {
@Autowired
SimpMessagingTemplate template;
@MessageMapping("/chat")
public void greeting(Message<Object> message, @Payload ChatMessageDto chatMessage) throws Exception {
System.out.println("Stomp client called");
Principal principal = message.getHeaders().get(SimpMessageHeaderAccessor.USER_HEADER, Principal.class);
String authedSender = principal.getName();
chatMessage.setSender(authedSender);
String recipient = chatMessage.getRecipient();
System.out.println("authedSender : "+authedSender +" --- recipient :: "+recipient);
if (!authedSender.equals(recipient)) {
template.convertAndSendToUser(authedSender, "/queue/messages", chatMessage);
}
template.convertAndSendToUser(recipient, "/queue/messages", chatMessage);
}
}
JS:
function connect() {
var socket = new SockJS('/chat');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/user/queue/messages', function(greeting){
showMessage(greeting.body);
});
});
}
function sendMessage() {
var recipient = document.getElementById('recipient').value;
var message = document.getElementById('message').value;
var date = new Date();
var time = date.toISOString();
stompClient.send("/app/chat", {}, JSON.stringify({ 'sender': '', 'recipient': recipient, 'message': message, 'time': time }));
}
function showMessage(message) {
var jsonResponse = JSON.parse(message);
var response = document.getElementById('response');
if(jsonResponse.message !== "New Chat Request") {
var eachMgsDiv = document.createElement('div');
eachMgsDiv.setAttribute('class','col-sm-12 ng-scope');
var recipient = document.getElementById('recipient').value;
if(jsonResponse.recipient === recipient) {
eachMgsDiv.innerHTML = myMgsTmpPrt1 + jsonResponse.sender + myMgsTmpPrt2 + myMgsTmpPrt3 + jsonResponse.message + myMgsTmpPrt4 + new Date(jsonResponse.time) + myMgsTmpPrt5;
}
else {
eachMgsDiv.innerHTML = othersMgsTmpPrt1 + jsonResponse.sender + othersMgsTmpPrt2 + othersMgsTmpPrt3 + jsonResponse.message + othersMgsTmpPrt4 + new Date(jsonResponse.time) + othersMgsTmpPrt5;
}
response.appendChild(eachMgsDiv);
}
package com.aghil.chat.controller;
导入java.security.Principal;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.messaging.Message;
导入org.springframework.messaging.handler.annotation.MessageMapping;
导入org.springframework.messaging.handler.annotation.Payload;
导入org.springframework.messaging.simp.SimpMessageHeaderAccessor;
导入org.springframework.messaging.simp.SimpMessagingTemplate;
导入org.springframework.stereotype.Controller;
导入com.aghil.chat.dto.ChatMessageDto;
@控制器
公共类聊天信息控制器{
@自动连线
SimpMessagingTemplate;
@消息映射(“/chat”)
公共无效问候语(消息消息,@Payload ChatMessageDto chatMessage)引发异常{
System.out.println(“调用Stomp客户端”);
Principal Principal=message.getHeaders().get(SimpMessageHeaderAccessor.USER_头,Principal.class);
字符串authedSender=principal.getName();
chatMessage.setSender(authedSender);
字符串recipient=chatMessage.getRecipient();
System.out.println(“authedSender:+authedSender+”---收件人::“+recipient”);
如果(!authedSender.equals(收件人)){
template.convertAndSendToUser(authedSender,“/queue/messages”,chatMessage);
}
template.convertAndSendToUser(收件人,“/queue/messages”,聊天信息);
}
}
JS:
函数连接(){
var socket=new SockJS('/chat');
stompClient=Stomp.over(套接字);
stompClient.connect({},函数(框架){
setConnected(true);
console.log('Connected:'+frame);
stompClient.subscribe('/user/queue/messages',函数(问候语){
showMessage(greeting.body);
});
});
}
函数sendMessage(){
var recipient=document.getElementById('recipient')。值;
var message=document.getElementById('message')。值;
变量日期=新日期();
var time=date.toISOString();
stompClient.send(“/app/chat”,{},JSON.stringify({‘发件人’:''‘收件人’:收件人,'message':消息,'time':time}));
}
函数showMessage(消息){
var jsonResponse=JSON.parse(消息);
var response=document.getElementById('response');
if(jsonResponse.message!=“新建聊天请求”){
var eachMgsDiv=document.createElement('div');
eachMgsDiv.setAttribute('class','col-sm-12 ng scope');
var recipient=document.getElementById('recipient')。值;
if(jsonResponse.recipient==收件人){
eachMgsDiv.innerHTML=mymgstmprt1+jsonResponse.sender+mymgstmprt2+mymgstmprt3+jsonResponse.message+mymgstmprt4+新日期(jsonResponse.time)+mymgstmprt5;
}
否则{
eachMgsDiv.innerHTML=othersMgsTmpPrt1+jsonResponse.sender+othersMgsTmpPrt2+othersMgsTmpPrt3+jsonResponse.message+othersMgsTmpPrt4+新日期(jsonResponse.time)+othersMgsTmpPrt5;
}
响应。追加子项(每个HMGSDIV);
}
您能提供任何代码示例吗?感谢您查看问题..我将示例代码粘贴在这里。。