Tag: websocket

从应用程序的其他层发送STOMP消息

我正在使用带有RabbitMQ代理的集群tomcat环境中使用Spring Websockets构建应用程序。 我有一个API模块需要注册端点来监听。 我按照正常的例子提出了这个配置: @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(final MessageBrokerRegistry config) { config.enableStompBrokerRelay(“/topic/”) .setRelayHost(“localhost”) .setRelayPort(61613) .setClientLogin(“guest”) .setClientPasscode(“guest”); } @Override public void registerStompEndpoints(final StompEndpointRegistry registry) { registry.addEndpoint(“/updates”) .setAllowedOrigins(“*”) .withSockJS(); } } 虽然这有效,但它并没有解决我的问题,因为看起来WebSocket和中继配置都捆绑在API模块中,因此其他层无法重用代理。 我需要在服务层发生stomp消息代理中继配置,以便我们的应用程序的其他模块可以将消息推送到RabbitMQ中的主题,然后转向并通知API模块更新所有打开的websockets。 下面是我们的应用程序中相关层的示例图以及我要完成的任务。 我需要允许模块“Cron Message Sender”通过我们的其他API模块将消息推送给订阅消息主题的每个人。

在哪里可以找到javax.websocket .jars以便在项目中使用

我一直在尝试使用Java库jPushbullet2 。 它的一个依赖是“ javax.websocket ”。 我在网站上搜索了websocket API所在的位置,并且无法找到要下载和使用的jar。 这样的事情存在吗? 我还注意到jPushbullet2的作者提到了Tyrus,它是一个“参考实现”,可以参考javax.websocket。 这是我需要的吗? 我已经将它添加到我的项目的构建路径以及其他依赖项,并尝试运行第一个推送样本: public class FirstPush { public static void main(String[] args) throws PushbulletException { PushbulletClient client = new PushbulletClient( “o.F8y8swnMc4MESY5rE1aUw8cFLloFH2uH” ); String result = client.sendNote(null, “My First Push”, “Great library. All my devices can see this!”); System.out.println( “Result: ” + result ); } } 但是,遗憾的是,这会导致以下错误: Exception […]

无法在WebSocketHandlerAdapter上播放

我正在建立一个基于氛围的websocket概念certificate。 创建了一个订阅2个频道的javascript客户端,并在服务器上创建了创建两个广播公司并继续发送数据的线程,但是我无法在客户端上获取数据。 有没有办法检查邮件是否卡在服务器端或客户端? 我在哪儿丢球吗? 🙂 这就是我现在所拥有的: PublishServerState – 创建广播公司并发送消息 import javax.servlet.http.HttpServlet; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.atmosphere.cpr.AtmosphereFramework; import org.atmosphere.cpr.Broadcaster; import org.atmosphere.cpr.BroadcasterFactory; // TODO desligar os threads quando a app esta desligando public class PublishServerState extends HttpServlet { private static final long serialVersionUID = 1L; public static String value1 = “um-“; public static String […]

什么是Spring websocket中的MultiServerUserRegistry?

在org.springframework.messaging.simp.user包中有一个MultiServerUserRegistry类。 这个类似乎适用于多服务器应用程序,但我找不到任何可以帮助我理解它是如何工作的文档或者我应该如何使用它。 这门课做了什么以及如何使用它? 如何使用websocket处理多服务器应用程序?

如何使用websockets从mysql获取实时通知更新?

从几天开始,我一直在搜索社交网络或Q / A网站如何获得实时通知。 我开始了解订阅者 – 发布者模式。 我开始知道使用WebSockets获取实时更新。 Websocket发布端点,客户端订阅该端点,并不断获取任何更改的更新。 但我从网上得到的例子都是聊天应用程序。 但我的要求是从MySQL DB获取实时通知。 所以我的想法很少 我是否正在使用WebSockets来满足正确的要求? 或者我的要求还有其他一些有效的方法吗? 如果这对我来说是有效的方式,我认为解决这个问题的模式是:WebSocket将连接到MySql并始终查找更改。 它还发布了我的客户端将始终寻找的端点。 提交给Mysql的任何更改都将反映在WebSocket中并导致客户端应用程序。 如果我的模式是正确的,我不知道如何将WebSocket连接到Mysql。 任何帮助/指导都非常感谢。 更新 : 经过一些网络搜索: 1.由于我为我的网站创建了Rest Webservices,AJAX是实现通知function而不是WebSockets的更好方法吗? 2. WebSockets是否比实现Rest端点的AJAX调用更复杂(因为两者的目的相同,是为了获取通知)?

保护基于Spring消息传递的websocket服务

我现在正在研究这个问题已有3个星期没有真正的解决方案,我真的希望你能帮助我。 一点项目背景: 使用基于JavaScript / PHP的客户端的Webapp通过SocksJS发送消息并向“门”发送消息 门是用Java / Spring编写的,使用@SendTo和@MessageMapping来发送和接收消息 来自门的消息被发送到RabbitMQ并通过“messageBrokerRegistry.enableStompBrokerRelay”返回给客户端 到目前为止它的工作原理,发送的消息都会回来。 现在是高级安全部分: 消息应该通过包含用户和东西的cookie来保护…… 据我所知,WebSockets本身并不支持安全性。 您必须像使用BASIC auth或类似的“常用”webapp一样保护您的webapp。 所以我添加了一个servletfilter,其中包含一个扩展GenericFilterBean的类。 如果用户发送了正确的cookie页面加载,否则他会收到403错误。 现在出现了问题: 由于@SendTo向所有订阅者发送消息而@SendToUser似乎只将其发送到一个会话,因此我倾向于使用@SendToUser。 但似乎无法选择要创建的rabbitMQ队列。 我想要一些像“/ myqueue-user-123”。 @SendToUser无法做到这一点,因为生成的队列是随机的,并且基于SessionID,我无法覆盖。 所以我尝试过(我尝试除了拦截器,事件等之外的其他东西),使用@SendTo没有值,以便客户端可以决定它必须发送到的队列。 我现在需要的是评估cookie中的用户与“/ myqueue / user-123”相关联。 如果不是,请不要向他发送消息。 阻止他订阅。 断开他,无论如何。 但在我看来,你绝对不能 – 阻止发送消息,只是“拦截”以记录它们而不是改变 – 断开websocket因为它自动尝试重新连接 – 抛出exception,因为订阅仍然继续(事件只是事件,不是要干涉的东西)。 我会非常感谢任何建议或提示。 因为我完全被困在这里……

WebSockets,GlassFish,Grizzly – 无法连接

我正在尝试开始使用WebSockets,并尝试编写一个简单的应用程序来通过websoket来回发送消息。 但是,看起来我尝试创建的套接字永远不会连接。 为什么会这样? 下面是我的WebSockets类的代码。 调用.onConnect() ,它会记录: 我是sockets,我是连接的。 我联系了吗? – 假 更新:在JavaScript中,我创建了有问题的套接字, readyState为1 ,这意味着“套接字打开,通信可能”。 import abMisc; //writes logs. import com.sun.grizzly.websockets.BaseServerWebSocket; import com.sun.grizzly.websockets.DataFrame; import com.sun.grizzly.websockets.WebSocketListener; public class ChatWebSocket_v2 extends BaseServerWebSocket { private String user; public ChatWebSocket_v2(WebSocketListener… listeners) { super(listeners); } public String getUser() { if (user == null) { Misc.print(“User is null in ChatWebSocket”); throw new NullPointerException(“+=The […]

已建立大气sockets但未接收/发送数据

我正在关注Atmosphere 教程以获得基本的聊天应用程序设置。 目前,当运行javascript时,它似乎能够使用Web套接字建立与服务器的连接。 我在Chrome控制台中获得以下内容: Invoking executeWebSocket core.js:2298 Using URL: ws://localhost:8080/web-transport/chat?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.1&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json core.js:2298 Websocket successfully opened 但是,当我尝试发布数据(subSocket.push(…))时似乎没有任何事情发生。 我已经尝试调试AtmosphereHandlerService但它似乎永远不会被命中(并且没有生成日志。 我错过了什么会导致这种情况? 到目前为止,我有以下内容: web.xml中 AtmosphereServlet AtmosphereServlet AtmosphereServlet AtmosphereServlet org.atmosphere.cpr.AtmosphereServlet <!– true –> AtmosphereServlet /chat/* ChatAtmosphereHandler.java @AtmosphereHandlerService(path = “/chat”) public class ChatAtmosphereHandler implements AtmosphereHandler { public void onRequest(AtmosphereResource resource) throws IOException { AtmosphereRequest request = resource.getRequest(); if (request.getMethod().equalsIgnoreCase(“GET”)) { resource.suspend(); } […]

使用netty-socketio服务器限制websockets

我们使用的是https://github.com/mrniko/netty-socketio 。 应用场景:服务器正在通过websocket以高速率将消息推送到客户端。 最近我们遇到了一个问题,即客户端无法处理来自socket.io服务器的所有事件消息。 websocket消息开始堆积,客户端变得没有响应。在Chrome开发人员工具中,我们可以看到客户端的内存逐渐增加。 使用wireshark分析tcpdump表明发生了大量重传,客户端无法应对。 我们计划在服务器端有一个限制机制。是否有任何事件/回调可用于检测慢速客户端,以便我们可以在服务器端为这个特定的websocket启动限制?

在Websocket会话中访问UserAgent?

使用Java的“JSR 356 – Java API for WebSocket”的Tyrus参考实现,我找不到一种方法来访问用于Websocket升级的HTTP连接。 因此,我无法访问浏览器发送的HTTP标头。 有没有办法读取HTTP UserAgent标头? 将“Session”对象转换为“TyrusSession”或类似对象是可以接受的,我必须这样做才能获得远程地址。 再次将UserAgent作为Websocket连接内的消息发送将是我的后备解决方案。