Реализация WebSocket на сервере Spring MVC
Я много искал о реализации WebSocket/XMPP на сервере на базе Spring MVC, но не смог найти конкретный ответ. Так вот мое требование
- Получите сообщение от клиента (в моем случае это будет Android/iOS Mobile) через WebSocket/XMPP на сервере tomcat и проанализируйте реальное сообщение на стороне сервера.
- Отправьте сообщение из серверного приложения клиенту 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. это многообещающе