我正在尝试spring websockets,由于某些原因我不明白,我可以建立与服务器的连接,但当我发送数据时什么也没有发生。
下面是我的配置类(与其他spring websocket示例完全相同):
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketsConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
}
我的控制器,在一个包中,我确保spring inicialites它,因为我用@PostConstruct注释说明init()消息。如您所见,我编写了system.out.println以便在控制台中查看该方法是否触发,但这种情况从未发生,因此数据从未到达控制器:
@Controller
public class MonitorSpring {
@PostConstruct
protected void init() {
System.out.println("init()");
}
@MessageMapping("/sendmessage")
@SendTo("/topic/message")
public ChatMessage sendMessage(@Payload ChatMessage chatMessage) {
System.out.println("sendMessage here");
return chatMessage;
}
@MessageMapping("/adduser")
@SendTo("/topic/user")
public ChatMessage addUser(@Payload ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) {
System.out.println("addUser here");
headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
return chatMessage;
}
}
最后是我的JavaScript客户机,我将在这里简单地把重要的部分放在这里:
function connect(event) {
username = document.querySelector('#name').value.trim();
if(username) {
usernamePage.classList.add('hidden');
chatPage.classList.remove('hidden');
var socket = new SockJS('https://' + document.location.host + '/ws');
stompClient = Stomp.over(socket);
stompClient.connect({}, onConnected, onError);
}
event.preventDefault();
}
function onConnected() {
stompClient.subscribe('/topic/message', onMessageReceived);
stompClient.subscribe('/topic/user', onMessageReceived);
stompClient.send("/app/adduser", {}, JSON.stringify({sender: username, type: 'JOIN'}))
connectingElement.classList.add('hidden');
}
function sendMessage(event) {
var messageContent = messageInput.value.trim();
if (messageContent && stompClient) {
var chatMessage = {
sender: username,
content: messageInput.value,
type: 'CHAT'
};
stompClient.send("/app/sendmessage", {}, JSON.stringify(chatMessage));
messageInput.value = '';
}
event.preventDefault();
}
我确实连接并创建了websocket,没有任何问题,但是当我向服务器发送一些东西时,我会在chrome控制台中看到这条消息,但服务器上什么也没有发生:
>>> SEND
destination:/app/sendmessage
content-length:53
{"sender":"user1","content":"message1","type":"CHAT"}
我会做错什么?
不确定是否有人还在面对这些问题。
对未来的任何人来说
除了Tovidiu的答案之外,您还应该允许跨原点头
Registry.AddEndPoint(“/ws”).SetAllowedOrigins(“*”).WithSockJs();
首先,您应该实现WebSocketMessageBrokerConfigureer
而不是AbstractWebSocketMessageBrokerConfigureer
,因为这是不推荐使用的。
当您连接到websocket时
var socket = new SockJS('https://' + document.location.host + '/ws');
您应该连接到http端点
var socket = new SockJS('http://' + document.location.host + '/ws');
如果您试图向https发送消息,但没有配置证书,它可能会拒绝您的消息。
我想知道过去2天在这里和那里。我的问题是,我正在使用多部分/表单数据发送多个文件,其中包含一些文本/纯字段。问题是,当我使用发送数据时,它工作正常,但是当我尝试使用发送数据时,服务器没有收到任何东西,下面是我的, 下面是方法,我是如何使用这个类的, 下面是我ASP的一面, 请帮我解决这个问题…!!!提前感谢。
所有这些似乎都运行良好,但cliend在身份验证后发送的数据似乎没有收到,只有3个字节设置为0。 我希望套接字在程序的生存期内保持打开状态,因此我不能处理流,因为这样也会处理套接字。 这里是客户端和服务器端的完整代码,希望有人能看到我的错误,或者我错过了一个问题。
我有一个简单的api fetch,它返回一个我想要插入到输入中的数字。我正在使用Document.getElementById(#id).InnerHTML。我可以通过console.log看到该值,但它没有显示在输入中。
通知广播接收机: 谁能帮帮我吗?我不知道我做错了什么
使用eventmachine gem,我试图在本地主机上发送和接收数据。以下是我的客户端和服务器文件的代码。 服务器铷 客户铷 我在单独的控制台中执行服务器和客户端文件。以下是客户端的输出 客户端输出 服务器输出 在服务器文件中,我已经打印了收到的数据,但它显示“.................. 谢啦
这是我第一次尝试进行基本身份验证,但似乎没有任何效果。Axios post未发送数据/控制器未返回响应。我找不到我到底哪里出错了,但我想知道我的http post请求的主体是否必须与requestbody匹配,或者我需要做什么更改才能让UserRepository将表单dat保存在数据库中? }