问题标签 [spring-websocket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1844 浏览

spring-mvc - spring-mvc,websockets 推送集成

我已经按照这个链接http://spring.io/guides/gs/messaging-stomp-websocket/启动并运行了该应用程序。

我想要的不止于此,我希望能够将数据推送回客户端,而无需客户端发送任何内容。

所以我设置了一个长时间运行的任务,它带有一个类似于下面的监听器

GreetingController 实现了 RunnableListener 并且 RunnableListener 有一个方法 public Greeting greeting(HelloMessage message);

方法的实现是启动一个线程,然后调用监听方法。。

发生这种情况时,我会在控制台上看到输出,但在浏览器上看不到任何内容。

谁能告诉我如何启动正在运行的任务并让服务器使用 Spring 而不是 poll 将内容推送到浏览器(javascript 中的 setTimeout 内容?)

问候锡

0 投票
1 回答
5461 浏览

spring - Spring WebSockets exception when using Spring 4.0.3.RELEASE

I have the following web socket configuration

The exception which i see from time to time is

after updating to nio connector i still receive the following exceptions

0 投票
1 回答
4261 浏览

java - Error on Delivery Message on Spring WebSocket using StompClient

I'm trying to send messages to my topic, but the problem is when I send the message nothing happens... I'm using apache tomcat 7.0.53

UPDATE: 04/15: Link to test:

http://ec2-54-187-72-145.us-west-2.compute.amazonaws.com:8080/kupo

Login: admin

Password: admin

LINK TO ACCESS TOMCAT LOG:

http://ec2-54-187-72-145.us-west-2.compute.amazonaws.com:28778/

P.S: You need to checked the combobox on the sidebar to start watch the messages

Github Link: https://github.com/tiarebalbi/kupo

LOG:

CODE:

Javascript Connect:

Browser Console:

Browser Console

Websocket Context Configuration:

0 投票
1 回答
3003 浏览

spring - Spring 4 STOMP over Websockets-如何正确设置登录名和密码

我正在玩 Spring 4 Stomp over Websockets。现在我正在尝试将登录名和密码放入我的配置中。

但是当我尝试使用不同的登录名和密码连接时,我仍然可以连接。这是我的javascript。

我的配置有问题吗?我将如何正确设置它。谢谢

0 投票
1 回答
1622 浏览

java - 是否有任何解决方案可以使用 spring4 websocket 向一组用户(不是所有用户)发送消息?

最近,我使用 spring4 websocket 将消息推送给最终用户。

我知道,在类SimpMessageSendingOperationsconvertAndSend中有 2 种方法( , convertAndSendToUser)来发送消息 。

但是有什么办法可以给一组用户发送消息,而组外用户不能订阅消息呢?

非常感谢。

0 投票
1 回答
2133 浏览

spring - Spring WebSocket - 在 clientOutboundChannel 上顺序传递消息(每个队列)

我正在使用 Spring WebSockets、Messaging 和 RabbitMQ 开发基于事件的实时应用程序。在这个应用程序中,消息需要按照它们插入 RabbitMQ 的确切顺序传递给客户端。

“已编辑”

我们的目标是从浏览器接收消息,在服务器上按顺序处理它(针对由路由参数确定的唯一对象),丰富消息并通过外部 STOMP MQ (RabbitMQ) 将其广播到所有订阅浏览器。

我们的MessageMapping方法如下:

@MessageMapping(/commands.{route}.{data}) public CommandMessage receiveCommand(CommandMessage message, Principal principal) {

}

如果我们将 ClientInboundChannel 和 ClientOutboundChannels 配置为 corePoolSize 和 maxPoolSize 各为 1,则所有消息都是有序的。

如果我们在 ClientInboundChannel 上增加 corePoolSize 和 maxPoolSize,消息到达 MQ 的顺序不正确;如果我们对 ClientOutboundChannel 进行同样的增加,消息会以错误的顺序到达浏览器。

]

测试是使用单个浏览器客户端完成的。

我们打开了对 StompBrokerRelayMessageHandler 的跟踪,并收到了如下日志条目:

2014-05-06 14:26:39 TRACE [clientInboundChannel-6] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:412] 处理消息=[Payload byte[303]][Headers={stompCommand=SEND, nativeHeaders={content-type=[ application/json;charset=UTF-8],destination=[/topic/commands.BKN01.20140318]},simpMessageType=MESSAGE,simpDestination=/topic/commands.BKN01.20140318,contentType=application/json;charset=UTF- 8,simpSessionId=ehjcoxb3,id=a31d0e3d-12cc-f562-1ec2-e2d7ba0899eb,时间戳=1399400799940}] 2014-05-06 14:26:39 DEBUG [clientInboundChannel-6] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler] java:658 消息处理程序。经纪人 2014-05-06 14:26:39 TRACE [clientInboundChannel-3] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:406] 忽略到目的地的消息=/app/commands.BKN01.20140318 2014-05-06 14:26:39 TRACE [clientInboundChannel-7] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:406] 忽略到目的地的消息=/app/commands.BKN01 .20140318 2014-05-06 14:26:39 TRACE [clientInboundChannel-1] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:412] 处理消息=[Payload byte[314]][Headers={stompCommand=SEND, nativeHeaders={content-type =[application/json;charset=UTF-8], 目的地=[/topic/commands.BKN01.20140318]}, simpMessageType=MESSAGE, simpDestination=/topic/commands.BKN01.20140318, contentType=application/json;charset= UTF-8,simpSessionId=ehjcoxb3,id=3cc7b4ae-8ea4-ef8a-6c4d-c3bc1ed23bcd,时间戳=1399400799947}] 2014-05-06 14:26:39 调试 [clientInboundChannel-1] osmssStompBrokerRelayMessageHandler [StompBrokerRelayMessageHandler.java:658] 将消息转发给代理

我们还为 org.springframework.web.socket.messaging 包中的 StompSubProtocolHandler 开启了跟踪,并收到如下消息:

2014-05-07 10:58:58 TRACE [http-nio-8080-exec-5] oswsmStompSubProtocolHandler [StompSubProtocolHandler.java:180] 收到来自客户端 session=u8wrnsr6 的消息

这些信息都没有提供一种简单的方法来将我们的 message.serverSequence 属性(在发送到 MQ 之前设置)与日志详细信息的各种 id 进行映射。

有什么方法可以增加入站/出站通道线程,从而使排序保持不变?例如,通道是否可以绑定到“路线”,或者线程可以与“路线”挂钩?

请帮忙。

谢谢,

0 投票
2 回答
3496 浏览

java - Spring 4 Web 套接字 - 我必须有一个 stomp 代理吗?

我一直在使用以下链接来玩新的 spring 4 websockets:

http://spring.io/guides/gs/messaging-stomp-websocket/

我想知道我是否必须使用 stomp 代理才能使用 spring 框架?有没有经纪人少的方法来使用它?

谢谢

0 投票
3 回答
12549 浏览

spring - Spring 4 AbstractWebSocketMessageBrokerConfigurer 与 SockJS 未正确协商传输

所以我必须说,所有的 websocket 教程/示例看起来都很简单,但似乎你真的必须挖掘才能找到简单示例中遗漏的非常重要的信息。在前端使用带有 SockJS 的 Spring 4 Stomp 消息代理时,我的 web 应用程序仍然存在很多问题。

目前,如果我在没有启用 SockJS() 的情况下向 StompEndpointRegistry 添加一个端点,然后使用 dojo 的 dojox/socket 在前端声明我的套接字,Firefox 28 将打开一个 websocket 就好了。但是,我需要 IE8 和 IE9 的支持,所以我切换到 SockJS。使用 AbstractAnnotationConfigDispatcherServletInitializer,我花了很多时间来弄清楚如何确保所有过滤器和 servlet 都设置为使用异步(为此,网络上的文档非常稀少)。一旦我解决了这个问题,我现在可以让它在 Firefox 中工作,但只能使用 xhr_streaming。sessionCookieNeeded 设置为 true 时,IE9 默认尝试使用 iframe 进行连接,但是,它会失败:

如果我将所需的 cookie 设置为 false,IE 将使用 xdr-streaming 并且工作正常,但是,它会丢失请求中的 jsessionid cookie,进而我失去了在控制器中获取 Principal 的能力,这对我很重要。我在 Spring Security 中启用了相同的源 x 帧标头,并且我已经验证了请求中存在标头,但它没有帮助。所以我希望能够弄清楚如何 A)使用 Firefox 中的 WebSocket 传输使 Spring 和 SockJS 正确协商,以及 B)让 IE8 和 9 正确使用 iframe 传输,这样我就可以保留 cookie。

这是我的配置/代码:

网络应用配置:

Spring MVC 配置:

Spring根上下文配置:

弹簧安全:

WebSocket 消息代理配置:

WebSocket 控制器:

最后,我用来测试的 html 中的 javascript:

当我在 Firefox 中连接时,这是我在控制台中看到的:

/info 响应是:

当它尝试建立 websocket 连接时,请注意奇怪的字符串错误。我猜这是我问题的根源,但我没有做任何有趣的事情,我不知道是什么原因造成的。

在 IE 中,这里是网络流量。iframe.html 文件似乎已正确构建,但它无法连接到后端。

信息响应如下所示:

如果有人想查看请求或响应标头,请告诉我。

更新 1:

罗森,感谢您的回复。我从你那里学到的关于 Spring 4 的一切 :)

Firefox 实际上(完全)没有工作,我无法获得 websocket 会话,它降级为 xhr-streaming。使用 xhr-streaming,没有问题,但我想要一个真正的 websocket 会话。

使用 IE,我不确定删除标题会确认什么?我认为 x 帧头只影响 iframe 会话,这根本不起作用。当我禁用需要 cookie 时,IE 使用 xdr-streaming(并且可以工作,尽管无法获取主体)。一旦我启用了 cookie,IE 就会正确地尝试使用 iframe。但即使标题到位,所有尝试都会失败:

iframe-htmlfile 和 iframe-xhr-polling 都失败了。我确实在 IE 中每次刷新都会清除缓存,并且我确实在 SockJS 中启用了调试模式。我会很好地在 IE 中使用 xdr-streaming,但我真的需要 jsessionid cookie。

有什么想法吗?

附带说明一下,如果客户端库代码支持相对路径,那就太好了(它实际上确实使用相对路径构建了 html 文件并且应该可以工作,但仍然会在日志中产生错误),即:

这将使部署到生产环境不那么痛苦。

更新 2:

快速总结:没有变化。

这是我尝试在我的安全配置中使用 .headers().and() 在 IE9 中连接:

/info 的请求标头:

和响应头:

Firefox 没有区别。当它尝试打开 websocket 时,我得到了同样奇怪的字符串错误,然后回退到 xhr-streaming:

0 投票
1 回答
1354 浏览

spring - 如何使用 CloudAMQP 配置 Spring Websocket

我有一个 Spring Boot 应用程序,我将其部署到 Cloud Foundry 实例 (BlueMix)。我已将 CloudAMQP 实例绑定到应用程序,并希望使用它来发送我的 STOMP 消息。我无法正确配置我的 StompBrokerRelayRegistration 类以成功连接 CloudAMP 中的 RabbitMQ 实例。我打过电话

但这试图连接到本地主机。我认为它可能会尝试使用我的 org.springframework.amqp.rabbit.connection.ConnectionFactory bean,但我想不会。

然后我尝试使用 VCAP_SERVICES 中的信息调用 setRelayHost、setRelayPort、setSystemLogin、setSystemPasscode 和 setVirtualHost。完成此操作后,Spring 似乎尝试连接到 RabbitMQ 实例,但根据日志,连接立即关闭说

对等方重置连接

. 任何人都知道我可能做错了什么?

更新

显然我使用了错误的端口。使用端口 5672 会导致立即关闭连接的行为。如果我使用端口 61613,则连接似乎已建立。但是,一旦浏览器尝试建立 websocket,就会引发以下异常

在此之上,我看到了这个警告

有人知道这里出了什么问题吗?

0 投票
1 回答
306 浏览

spring - Spring 4 WebSockets 订阅主题

是否可以使用spring消息将spring托管bean中的方法映射到主题订阅?

我在这里查看了示例:http: //assets.spring.io/wp/WebSocketBlogPost.html 包括示例股票应用程序,但看起来所有主题订阅都在客户端。是否也可以在服务器端订阅主题?