Avatar
0
Bảo Ngô Beginner
Bảo Ngô Beginner
Bàn về cách ezy trả response
@Override

protected void execute() throws EzyBadRequestException {

if (message.length() > 255) {

throw new EzyBadRequestException(ChatErrors.MESSAGE_TOO_LONG, "message too long");

}

ChatChannelUsers channelUsers =

channelUserService.getChannelUsers(channelId, user.getName());

if (channelUsers == null) {

throw new EzyBadRequestException(ChatErrors.CHANNEL_NOT_FOUND, "channel with id: " + channelId + " not found");

}

messageService.save(new ChatMessage(

maxIdService.incrementAndGet(ChatEntities.CHAT_MESSAGE),

true, message, channelId, user.getName(), clientMessageId

));

responseFactory.newObjectResponse()

.command(CHAT_USER_MESSAGE)

.param("from", user.getName())

.param("message", message)

.param("channelId", channelId)

.usernames(channelUsers.getUsers())

.execute();

}

Đoạn code trên xử lý request và gửi response cho user. Tuy nhiên e có thắc mắc là tại sao mình ko thiết kế để return 1 cái response entity (ví dụ bên spring) hoặc 1 dto màcác lại return void và để việc response cho developer?

Nếu như e có 1 concurrent map/list để cache user lại và sau đó bốc bừa 1 vài user ra để gửi thì sẽ có vấn đề không?

Tệ hơn nữa, nếu e cache lại responseFactory và dùng nó cùng với list user để spam message thì có ổn không?

Regards

  • Answer
java
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
Lập trình http và lập trình socket là hai lĩnh vực khác nhau.
  1. Lập trình http theo kiểu request - response: Nghĩa là một yêu cầu sẽ được xử lý và phản hồi tương ứng cho một client.
  2. Lập trình socket nó có nhiều kiểu:
  • request - response: Nghĩa là một yêu cầu sẽ được xử lý và phản hồi tương ứng cho một client đang kết nối.
  • request - responses: Nghĩa là một yêu cầu sẽ được xử lý và phản hồi tương ứng cho một nhiều client đang kết nối, ví dụ em chat cho 1 group thì tất cả những client trong group đều nhận được.
  • only request: Nghĩa là một yêu cầu sẽ được xử lý và không cần phản hồi.

Chính vì sự đa dạng như vậy mà hàm nên để là void và sau đó cung cấp lớp responseFactory để cho phép dev tuỳ ý sử dụng em ạ.

  • 0
  • Reply