在基于 Spring MVC 的服务器上实现 WebSocket
Posted
技术标签:
【中文标题】在基于 Spring MVC 的服务器上实现 WebSocket【英文标题】:Implementing WebSocket on Spring MVC based Server 【发布时间】:2013-08-07 05:23:54 【问题描述】:我搜索了很多关于/XMPP 的信息,但无法找到具体的答案。所以这是我的要求
-
通过 Tomcat 服务器上的 WebSocket/XMPP 接收来自客户端(在我的情况下是 android/ios 手机)的消息,并在服务器端解析实际消息
从服务器应用向 WebSocket/XMPP 客户端发送消息
如果有人可以帮我指出一些好的教程或演示代码,那将是一个很大的帮助。
【问题讨论】:
【参考方案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将消息推送到Queue/Topic,XMPP客户端会收到消息。
享受吧!
顺便说一句:这正是我现在正在设置的...仍在学习中。
【讨论】:
【参考方案2】:看看这个:www.xchat.io。它是基于异步 Spring MVC(DefferredResult,你知道的)、XMPP 和 jQuery 构建的。很有希望。
【讨论】:
【参考方案3】:我不确定这是否只是完美的实现方式,但现在我找到了一个解决方案,很高兴在这里分享。
您必须完成两个步骤。 1.代替普通的HTTPServlet子类,创建WebSocketServlet的子类, 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
【讨论】:
以上是关于在基于 Spring MVC 的服务器上实现 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证