在基于Spring MVC的服务器上实现WebSocket



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

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

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

运行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客户端将接收消息。

享受吧!

BTW:这正是我现在正在建立的。。。仍在学习。

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

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

你必须完成两个步骤。1.创建WebSocketServlet的子类,而不是普通的HTTPServlet子类2.创建MessageInbound类的子类并覆盖其所需的方法。附言:只有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
        }
    }
}

最新更新