@Bean
public WebSocketHandler webSocketHandler() {
TopicProcessor<String> messageProcessor = this.messageProcessor();
Flux<String> messages = messageProcessor.replay(0).autoConnect();
Flux<String> outputMessages = Flux.from(messages);
return (session) -> {
System.out.println(session);
session.receive().map(WebSocketMessage::getPayloadAsText).subscribe(messageProcessor::onNext, (e) -> {
e.printStackTrace();
});
return session.getHandshakeInfo().getPrincipal().flatMap((p) -> {
session.getAttributes().put("username", p.getName());
return session.send(outputMessages.filter((payload) -> this.filterUser(session, payload))
.map((payload) -> this.generateMessage(session, payload)));
}).switchIfEmpty(Mono.defer(() -> {
return Mono.error(new BadCredentialsException("Bad Credentials."));
})).then();
};
}
私有静态映射客户端=new ConcurrentHashMap();public void sendMessageTo(String message,String ToUserName)抛出IOException{
for (WebSocket item : clients.values()) {
if (item.username.equals(ToUserName) ) {
item.session.sendText(message);
break;
}
}
}
我知道所有的消息都存储在outputMessages中并进行子标注。当发出新消息时,它如何找到正确的会话?
我的猜测是WebSocketHandler
是一个只包含一个方法handle
WebSocketHandler的接口
我相信这又使它成为一个functionalinterface
,可以用作lambda。
(session) -> { ... }
因此,当与客户端建立会话时,客户端发送websocket事件。服务器将查找WebSocketHandler并使用来自发送事件的客户端的会话填充它。
class ExampleHandler implements WebSocketHandler {
@Override
public Mono<Void> handle(WebSocketSession session) {
Mono<Void> input = session.receive()
.doOnNext(message -> {
// ...
})
.concatMap(message -> {
// ...
})
.then();
Flux<String> source = ... ;
Mono<Void> output = session.send(source.map(session::textMessage));
return Mono.zip(input, output).then();
}
}
@Bean
public WebSocketHandler webSocketHandler() {
return new ExampleHandler();
}
从Web API 2的模板中,post方法总是这样的: 我不理解这个< code>CreatedAtRoute()方法。有人能给我解释一下吗?
我需要一个推送消息服务器的方案。 现在我选择AutobahnJs+AutobahnPython方案。 AutobahnJs库使用html5的websocket连接AutobahnPython使用的服务器 在javascript中,使用订阅通道,每个客户端使用相同的订阅通道。clientD将消息发布到通道(与订阅通道相同),服务器将消息传递给订阅该通道的所有客户端。 这里有一个问题,我需要应用程序(
问题内容: 我只是在android上开始,而我的java很生锈。我不记得曾经见过像这样嵌套在另一个函数中的函数。有人可以向我确切解释final的作用,并解释为什么您要在另一个函数中嵌套这样的功能吗? 问题答案: 这是一个匿名类。实际发生的情况是正在使用重写的函数创建 的子类。 关于匿名类的最优雅的事情之一是,它们使您可以在需要的地方准确定义单发类。此外,匿名类具有简洁的语法,可减少代码中的混乱情况
我已经阅读了文档,但我发现它很难理解,我将感谢任何帮助!
在过去,你可以使用Google Now发送短信、社交网站和电子邮件。不过,最近的一个更新将允许你使用该服务通过WhatsApp、Viber、微信、Telegram和NextPlus发送消息。过程如下所示: 说“好的,谷歌”,然后等待应用程序开始监听。 继续“向[联系人姓名]发送whatsapp消息,说[您的消息]”例如:“向Jeff发送whatsapp消息,说你好吗?”您将看到应用程序图标与您的消
我正在阅读《Spring in Action4》一书,以使用WebSocket上的STOMP消息传递。 假设,如下所示: 然后客户端使用以下JavaScript代码订阅目标: 则该消息将发送到目的地,如下所示: 那么,两个目的地和看起来是不同的,消息怎么可能到达客户端呢?