0

我搜索了很多关于在基于 Spring MVC 的服务器上实现 WebSocket/XMPP 的信息,但无法找到具体的答案。所以这是我的要求

  1. 通过 Tomcat 服务器上的 WebSocket/XMPP 接收来自客户端的消息(在我的情况下,它将是一个 android/iOS 手机)并在服务器端解析实际消息
  2. 从服务器应用程序向 WebSocket/XMPP 客户端发送消息

如果有人可以帮助我指出一些好的教程或演示代码,那将是一个很大的帮助。

4

3 回答 3

1

运行 Tomee 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 服务配置中,在 Topic/Queue 上创建一个 Spring JMS 监听器(Spring ListenerContainer)配置。

您可以使用 JmsTemplate 通过 ActiveMQ 将消息推送到队列/主题,XMPP 客户端将接收该消息。

享受!

顺便说一句:这正是我现在正在设置的......仍在学习。

于 2013-08-18T04:35:31.477 回答
0

看看这个:www.xchat.io。它是基于异步 Spring MVC(DefferredResult,你知道的)、XMPP 和 jQuery 构建的。这是有希望的。

于 2013-11-15T15:10:46.433 回答
0

我不确定这是否只是完美的实现方式,但现在我找到了一个解决方案,很高兴在这里分享。

您必须完成两个步骤。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();
    }
}

这是一个可以发送/接收消息(字符串/二进制)的简单类。

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
        }
    }
}
于 2013-11-19T12:25:23.257 回答