OMGcoder
@OMGcoder
Начинающий java программист

Как реализовать дуплексное общение между сервером на Java EE и клиентом на Android?

Доброго всем времени суток.

Занимаюсь дипломной работой. Суть работы - реализовать что-то похожее на нормальные мессенджеры по типу Viber ну или что бы хоть с виду было похоже : )
Главное, что знаниями миллиардов фреймворков я не обладаю и во времени сильно ограничен, по-этому нужно
сделать простую реализацию но при этом вменяемую.

Изучаю книгу Professional Java for Web applications.
там в 10-й главе есть пример демонстрации работы дуплексного общения между клиентом и сервером средством использования соккетов.

На стороне сервера создаётся class TicTacToeServer.java в котором и прописаны все методы работы на стороне сервера.

@ServerEndpoint("/ticTacToe/{gameId}/{username}")
public class TicTacToeServer
{
    @OnOpen
    public void onOpen(Session session, @PathParam("gameId") long gameId,
                       @PathParam("username") String username)
    {
       //Обработка события
        
    }

    @OnMessage
    public void onMessage(Session session, String message,
                          @PathParam("gameId") long gameId)
    {
        //Обработка события
    }

    @OnClose
    public void onClose(Session session, @PathParam("gameId") long gameId)
    {
        //Обработка события
    }


Далее, со стороны клиента имеем обычную JSP страничку в которой прописан JS скрипт.
В этом скрипте, собственно, прописана вся работа с соккетами.

var move;
            $(document).ready(function() {
                var modalError = $("#modalError");
                var modalErrorBody = $("#modalErrorBody");
                var modalWaiting = $("#modalWaiting");
                var modalWaitingBody = $("#modalWaitingBody");
                var modalGameOver = $("#modalGameOver");
                var modalGameOverBody = $("#modalGameOverBody");
                var opponent = $("#opponent");
                var status = $("#status");
                var opponentUsername;
                var username = '<c:out value="${username}" />';
                var myTurn = false;

                $('.game-cell').addClass('span1');

                if(!("WebSocket" in window))
                {
                    modalErrorBody.text('WebSockets are not supported in this ' +
                            'browser. Try Internet Explorer 10 or the latest ' +
                            'versions of Mozilla Firefox or Google Chrome.');
                    modalError.modal('show');
                    return;
                }

                modalWaitingBody.text('Connecting to the server.');
                modalWaiting.modal({ keyboard: false, show: true });

                var server;
                try {
                    server = new WebSocket('ws://' + window.location.host +
                        '<c:url value="/ticTacToe/${gameId}/${username}"><c:param name="action" value="${action}" /></c:url>');
                } catch(error) {
                    modalWaiting.modal('hide');
                    modalErrorBody.text(error);
                    modalError.modal('show');
                    return;
                }

                server.onopen = function(event) {
                    //Обработка события
                };

                window.onbeforeunload = function() {
                    //Обработка события
                };

                server.onclose = function(event) {
                   //Обработка события
                };

                server.onerror = function(event) {
                    //Обработка события
                };

                server.onmessage = function(event) {
                          //Обработка события 
                };

                move = function(row, column) {
                    if(!myTurn) {
                        modalErrorBody.text('It is not your turn yet!');
                        modalError.modal('show');
                        return;
                    }
                    if(server != null) {
                        server.send(JSON.stringify({ row: row, column: column }));
                        $('#r' + row + 'c' + column).unbind('click')
                                .removeClass('game-cell-selectable')
                                .addClass('game-cell-player game-cell-taken');
                        toggleTurn(false);
                    } else {
                        modalErrorBody.text('Not connected to came server.');
                        modalError.modal('show');
                    }
                };
            });


Так как у меня клиент будет на Android то мне нужно реализовать на андроидовской java что-то такое, что по функционалу будет аналогично или лучше чем в выше приведённом скрипте.

Вопрос какими путями это реализуется?

Если у вас есть более логичные предложения и(или) моя идея бред то буду рад читать ваши предложения так как я залез в дебри в которых очень мало понимаю. Если честно то я вообще не знаю как писать мессенджеры и пытаюсь найти что-то, что поставит меня на верную колею.

Спасибо за внимание!
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Делаешь - правильно. Гугли по ключевому слову WebSockets. И все фреймворки что с этим связаны.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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