Как правильно создать веб-чат с помощью rsocket?JAVA

Программисты JAVA общаются здесь
Anonymous
Как правильно создать веб-чат с помощью rsocket?

Сообщение Anonymous »

Я создаю веб-чат, используя Java для сервера и JS для передней панели, но я не понимаю следующих пунктов:
  • как отправить сообщение всем пользователям чата если отправить?
  • как передать сообщение о событии в пользовательском интерфейсе, если, например, кто-то ввел текст в текстовую область и нажал отправить (грубо говоря, как преобразовать событие чьего-либо ввода в сообщение и его передачи)?
    Я бы хотел использовать канальную модель.
Это все, что я смог пока написать :
Сервер:
@Controller
public class SetUpController {
@ConnectMapping("chat")
public Mono handleSetUp(RSocketRequester requester, @Payload String token) {
ControllerUtils.tokenRSocketRequesterMap.put(token, requester);

return Mono.empty();
}
}

@Controller
public class ChatController {
protected JwtService jwtService;

@ConnectMapping("chat")
public Mono sendMessageForAll(Mono message) {
message.doOnNext(m -> ControllerUtils.tokenRSocketRequesterMap
.values()
.forEach(requester -> requester
.route("chat")
.data(message, Message.class)
.send()));

return Mono.empty();
}
}

Клиент:
const {
RSocketClient,
JsonSerializer,
IdentitySerializer,
encodeRoute
} = require('rsocket-core');

const RSocketWebSocketClient = require('rsocket-websocket-client').default;
const WebSocket = require('ws');

function connect() {
return new RSocketClient({
serializers: {
data: JsonSerializer,
metadata: IdentitySerializer
},
setup: {
keepAlive: 60000,
lifetime: 180000,
dataMimeType: 'application/json',
metadataMimeType: 'message/x.rsocket.routing.v0',
},
transport: new RSocketWebSocketClient({
url: 'ws://localhost:8080/tweetsocket',
wsCreator: (url) => {
return new WebSocket(url)
}
}),
})
.connect();
}

const client = connect()

client.subscribe({
onComplete: socket => {
socket.requestChannel({
data: Buffer(JSON.stringify(createAndSendMessage())),
metadata: encodeRoute('chat')
}).subscribe({
onComplete: () => console.log('complete'),
onError: error => {
console.log(error);
},
onNext: payload => {
createAndDrawMessage()
},
onSubscribe: subscription => {
subscription.request(2147483647);
},
});
},
onError: error => {
console.log(error);
},
onSubscribe: cancel => { }
});

class Message {
sender
text
date

constructor(sender, text, date) {
this.sender = username
this.text = password
this.date = date
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... th-rsocket

Вернуться в «JAVA»