Реализация WebSocket на сервере Spring MVC

Я много искал о реализации WebSocket/XMPP на сервере на базе Spring MVC, но не смог найти конкретный ответ. Так вот мое требование

  1. Получите сообщение от клиента (в моем случае это будет Android/iOS Mobile) через WebSocket/XMPP на сервере tomcat и проанализируйте реальное сообщение на стороне сервера.
  2. Отправьте сообщение из серверного приложения клиенту WebSocket/XMPP

Если бы кто-то мог помочь мне указать хороший учебный или демонстрационный код, это было бы очень полезно.

3 ответа

Запустить томее 1.5.2

http://openejb.apache.org/downloads.html

активировать сервер ActiveMQ JMS. создать конфигурацию OpenEJB.

http://www.mail-archive.com/users@openejb.apache.org/msg04327.html

настроить прослушиватель протокола сервера XMPP ActiveMQ (в файле activemq.xml)

в своей конфигурации сервисов Spring создайте конфигурацию прослушивателя Spring JMS (Spring ListenerContainer) в теме / очереди.

Вы можете использовать JmsTemplate для отправки сообщения в очередь / тему через ActiveMQ, XMPP-клиент получит сообщение.

Наслаждайтесь!

Кстати: это именно то, что я сейчас нахожусь в процессе настройки... все еще учусь.

Я не уверен, является ли это просто идеальным способом для достижения или нет, но сейчас я нашел решение, и я был бы рад поделиться им здесь.

Есть два шага, которые вы должны сделать. 1. Вместо обычного подкласса HTTPServlet создайте подкласс WebSocketServlet и 2. Создайте подкласс класса MessageInbound и переопределите его обязательные методы. PS: только последняя версия tomcat поддерживает WebSocket (apache tomcat 7.0.42 или выше).

Вот класс WebSocket.

public class WsChatServlet extends WebSocketServlet {

    private static final long serialVersionUID = 1456546233L;

    @Override
    protected StreamInbound createWebSocketInbound(String protocol,
            HttpServletRequest request) {
        return new IncomingMessageHandler();
    }
}

И это простой класс, который может отправлять / получать сообщения (String/binary).

public class IncomingMessageHandler extends MessageInbound {

    @Override
    public void onOpen(WsOutbound outbound) {
        logger.info("Open Client.");
    }

    @Override
    public void onClose(int status) {
        logger.info("Close Client.");
    }

    @Override
    public void onTextMessage(CharBuffer cb) throws IOException {
        logger.info("Text Message received:" + cb.toString());
    }

    @Override
    public void onBinaryMessage(ByteBuffer bb) throws IOException {

    }

    public synchronized void sendTextMessage(String message) {
        try {
            CharBuffer buffer = CharBuffer.wrap(message);
            this.getMyoutbound().writeTextMessage(buffer);
            this.getMyoutbound().flush();

        } catch (IOException e) {
            // Handle Exception
        }
    }
}

Проверить это: www.xchat.io. Он был построен на основе асинхронного Spring MVC (вы знаете, DefferredResult), XMPP и jQuery. это многообещающе

Другие вопросы по тегам