@DailyDDose

WebSocket: порядок отправки сообщений?

Как решить проблему с тем, что сообщение #2(UserConnectionMessage) приходит иногда раньше, чем #1(AuthMessage) ?

WebSocketServer:
var authMessage = new Payloads.Server.AuthMessage()
{
    Message = "SUCCESS",
    UsersList = server.ConnectedSockets.Values.Select(user => user.Login).ToArray()
};
 
// Отправка сообщения подключенному клиенту об авторизации
// статус SUCCESS и список пользователей UsersList
socket.Send(Helper.BuildMessage(authMessage));
server.ConnectedSockets.Add(socket, userData);
 
var userConnectionMessage = new Payloads.Server.UserConnectionMessage()
{
    Login = server.ConnectedSockets[socket].Login,
    Status = "CONNECT"
};
// Отправка сообщения всем пользователям о новом подключенном клиенте
// логин и статус CONNECT
server.SendToAll(userConnectionMessage);


WebClient:
OnMessage = (message) => console.warn(message);

Из-за этой проблемы клиентское приложение работает некорректно, т.к. порядок сообщений нарушен:
{
    "Type": "USER_CONNECTION_MESSAGE",
    "Payload": {
        "Login": "admin2018",
        "Status": "CONNECT"
    }
}

{
    "Type": "AUTH_MESSAGE",
    "Payload": {
        "Message": "SUCCESS",
        "UsersList": []
    }
}


порядок ненормальный:
5a87b32e11a54744312413.png
порядок нормальный:
5a87b3361e76c178592263.png
  • Вопрос задан
  • 336 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DailyDDose Автор вопроса
Прокатит ли такой вариант?
public async void MethodName()
{
    socket.Send(Helper.BuildMessage(authMessage));
    await Task.Delay(1000);
    server.SendToAll(userConnectionMessage);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы