问题标签 [tyrus]

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 回答
313 浏览

java - GlassFish 4 或 Tyrus 中的错误:每个 ByteBuffer 调用 Decoder#willDecode 两次?

我编写了使用 WebSockets 的最简单的应用程序。我的后端是 GlassFish 4 build 89,我的前端是一个 JavaFX 2.2 应用程序客户端,它使用Tyrus 1.0 RC3,WebSockets 的 Java API 的参考实现。GlassFish 也使用 Tyrus,尽管我一直懒得去查找 GlassFish build 89 中包含的确切版本。

java.util.Date我测试的 WebSocket API来回发送了一个,仅此而已。好吧,应该添加二进制对象。所以我写了我自己Decoder的实现Decoder.Binary<Date>。像往常一样,当我进入新的知识领域时,我喜欢记录每个方法调用。当我查看控制台时,我突然发现我的Deocer.Binary<Date>#willDecode(ByteBuffer)方法被同一个线程连续调用了两次!如果这真的是故意的,那么这种模式的用例是什么,增加了什么价值?但我认为这一定是一个错误!我试图在一些 GlassFish JIRA 站点上提交错误/问题,但我没有在任何地方找到该按钮。

0 投票
1 回答
2358 浏览

websocket - Tyrus websocket 服务器握手问题?

我遵循了此处提供的用户指南:我在我的 pom 中添加了这个:

我在我的主课上写了这个:

我的 EchoEndPoint 类的内容与指南中描述的相同。

我尝试使用 HTML5 websocket 连接到它:

看来,浏览器端,它没有连接(它直接调用 onClose 回调)。而且,服务器端,我在控制台中得到了这个:

如果有任何帮助,我复制浏览器检查器捕获的请求标头:

这是握手问题吗?

编辑:我已经在 Chrome (28.0.1500.72) 中尝试过,它正在工作。也许问题来自 Firefox 在构建标头时?

0 投票
1 回答
1113 浏览

java - Websocket 客户端无法部署到 Glassfish

亲爱的 Stack Overflow 极客们,

我正在尝试使用 Java EE 7 创建一个非常基本的 Java 客户端-服务器应用程序,其目的是使用 JSR 356 实现通过 websocket 发送消息。

我已经按照我在那里找到的各种博客成功地编程和部署了服务器,并且我能够将 Javascript 客户端与我的 java 服务器进行通信。

现在我要做的是创建一个需要与服务器通信并检索相同信息的独立 Java 应用程序。我读到 JSR 356 实现可以在 Java 客户端中使用,而这正是我所做的。我还使用 Tyrus 创建客户端并使用闩锁机制等保持其运行。等等。漂亮。客户端最终被编程,服务器启动并运行但是当我尝试运行客户端时出现此错误:

我在 NetBeans 7.3 中使用 Java EE 7 API + Tyrus 并在 Glassfish 4 中进行部署(据我所知,它支持 JSR 356 实现)现在,到底为什么找不到 CloseReason 类!:( 如果是这样的话,它不应该编译,不是吗?

奇怪的是,它没有抱怨与 websocket 实现(JSR 356)相关的其他类,另一方面,我部署了服务器(web-app)并且 websocket 机制工作得很好。(我想我没有在那里实施 CloseReason .. 但为什么它只抱怨这个!:@)

提供的任何帮助将不胜感激!!

干杯,

另一个寻求帮助的 Stack Overflow Geek。:)

0 投票
2 回答
2368 浏览

java - tyrus websocket connectToServer - 如何清理守护线程

tyrus websockets ClientManager connectToServer'未收到握手响应'

如何在没有越来越多的守护进程和灰熊内核和灰熊工作线程创建的情况下重试连接。是否有调用 Session 或客户端来杀死/清理 Thread-1 到 4 以及 Grizzly-kernel 和 Grizzly-worker 线程?

示例 JAVA 主线,它永远尝试与可能未运行或定期重新启动的服务器建立并保持连接。


0 投票
1 回答
165 浏览

spring - 圣杯 2.3。0 和项目 tyrus

Grails 2.3.0 和通过 [Project Tyrus][1] 推送通知?

grails 2.3.0 可以和 Tyrus 1.3 一起玩吗?

我发现:http ://www.objectpartners.com/2013/06/25/getting-groovy-with-spring-and-websockets/

但这是基于 Tyrus 1.0 的,这给 Grizzly 带来了一些问题。最新的 Tyrus 版本是 1.3,但我不知道如何与 Spring 容器集成。将一些spring服务注入ServerEndpoint(https://tyrus.java.net/documentation/1.3.1/user-guide.html#d0e1075)会很好

但即使是@Inject 似乎也错过了 grails 2.3.0。

而且,tyrus貌似不兼容tomcat 7。

0 投票
1 回答
3286 浏览

java - 如何将 Tyrus(JSR 356 实现)部署到 Web 容器?

我正在尝试将 Tyrus 部署到 Tomcat 8 容器并且失败了。根据文档,我应该能够部署一个包含我的类和支持 Tyrus 类/依赖项的 WAR,并且所有使用 @ServerEndpoint 注释的类都应该在 WAR 中找到并部署为 websocket 端点。这条指令让我有点吃惊,因为我没有在部署描述符中定义任何类型的过滤器,而是决定我必须以某种方式依赖 Tomcat 8 中对 JSR 356 的支持中的一些未知魔法。事实证明,没有这样的魔法。注意:我使用的是 Tomcat 8,因为我的理解是它支持 JSR 356 websocket 标准。另外,我的 JDK 是最新的 Java 7 版本。

我花了一些时间对此进行研究,发现人们通过从命令行将服务器实例 (org.glassfish.tyrus.server.Server) 作为 Java 应用程序运行,成功地使用 Tyrus 发布 websocket 端点。我已经尝试过了,它有效。但是,我无法在 Tomcat 上成功部署 WAR。

有没有人了解通过 Tyrus 在 Tomcat 8 上成功发布 websocket 端点所需的步骤?

0 投票
2 回答
9265 浏览

dependency-injection - Java EE 7: How-to inject an EJB into a WebSocket ServerEndpoint?

To sum up my failing project: My @ServerEndpoint class is packaged in a WAR together with the beans.xml file. My WAR in turn is packaged in a EAR and this EAR file is what gets deployed to a GlassFish 4 server that internally use Tyrus.

Should it be possible?

The WebSocket specification says:

Websocket endpoints running in the Java EE platform must have full dependency injection support as described in the CDI specification. Websocket implementations part of the Java EE platform are required to support field, method, and constructor injection using the javax.inject. Inject annotation into all websocket endpoint classes, as well as the use of interceptors for these classes.

The only thing I can understand of this paragraph is that injecting an Enterprise JavaBean into a WebSocket should be no rocket science. However, for me, whatever I do, it fails to work. I feel that most intuitively one should only need to prefix a server endpoint instance field with the @EJB or @Inject annotation, but no one of these annotations work. The variable will be null.

Already a known problem?

One Internet source says a bit cryptically that "due to a bug" he must use constructor injection. I saw that he had added the annotation @Named to the server endpoint. I used the famous copy paste pattern and did exactly what he did, with and without the @Named annotation, and it still don't work. In fact, my @Inject annotated constructor is never even called!

The Tyrus user guide says that one can mix together anyone of the famous session bean declaration annotations with the server endpoint (@Stateful, @Stateless and @Singleton). So I did, still the injection fails to happen. It doesn't matter if I use the annotation @Inject or @EJB.

And that is strange, because the book Java EE 7 Developer Handbook claims to have a working example on page 27 and page 28 based on the same approach. Author Peter Pilgrim annotates his server endpoint @Stateless. He then uses @Inject to do the injection. He says:

In Java EE 7 we must also declare [our server endpoint] as a stateless EJB with @Stateless in order to inject [another EJB] as a dependency. (This is a consequence of Java for WebSocket 1.0 specification.) Note that we can use @javax.annotation.Inject from CDI.

Okay so he says we must use a @Stateless annotation, and "notes" that one can use @Inject. For me, it sounds utterly strange that we "must" use a @Stateless annotation on a server endpoint which according to the specification, is everything else than stateless (!). I've read elsewhere on the Internet that using @Inject instead of @EJB should be one fix. Peter "notes" that "we can use" @Inject but it smells fishy, as if he never got @EJB to work at all and now tries to flee responsibility.

Well, whatever the reason ("bug" or "consequence of the specification"), I couldn't get my dependency injection to work whatever vivid mix of annotations I used on the endpoint class itself or on the instance field.

The ultimate fix

Is to programmatically use a JNDI lookup, but it looks ugly and should be avoided.

0 投票
1 回答
178 浏览

java - Tyrus Websocket 实现中的异步消息传递是否有序?

如果我使用一个线程重复调用RemoteEndpoint.Async.sendText(String)的Tyrus实现,我的消息是否会在我(客户端)发送它们时总是有序地在线路上消失?

0 投票
1 回答
251 浏览

java - How to interrupt Glassfish Websocket new live thread?

I setup Glassfish 4 websever using websocket.

When I connect to Glassfish through webscoket, I use VisualVM monitor it and see the live threads are increased when Glassfish get new connection. This number is also bigger, sometimes it decrease small amount (mayge GC perform) and turn increase larger amount.

If my server get 1000 new connections over Websocket per minutes and 1000 new live thread appear, so my server will get trouble after 2 hours.

I simulated about 30000 threads to test my server. It's ok. But if over 30000 threads, it will appear errors message: Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread.

JVM options: -Xmx:10240m -Xms:10240m

How to interrupt Glassfish Websocket new live thread to prevent trouble to server?

0 投票
1 回答
766 浏览

java - ServerEndpointConfig.Configurator 实例应该是线程安全的吗?

我想在 websocket 连接之间共享一些信息。共享数据有点复杂所以我不能用EndpointConfig.getUserProperties()。我想扩展ServerEndpointConfig.Configurator和添加我自己的数据结构。(我不想覆盖其他方法,例如getEndpointInstance)。问题是我应该使用线程安全的数据结构吗?或者我可以使用任何数据结构,并且 Web 套接字容器将保证我的实例ServerEndpointConfig.Configurator将以安全的方式被访问。