问题标签 [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 回答
1483 浏览

websocket - 将泽西岛与 Tyrus 结合

我有一个在 Grizzly 实例上运行的 Jersey JAX-RS 应用程序:

里面my.package.rest有 JAX-RS 注释资源。我想在同一服务器实例上使用 Tyrus 添加 websocket 注释(、、、等)资源(比如在“ @ServerEndpointhttp://127.0.0.1:8080/websocket @OnOpen),但我能找到的所有文档都显示如何使用 Tyrus + Grizzly 容器启动独立的 websocket 服务器,而不是与 Jersey 结合使用。我正在寻找类似的东西:@OnMessage

但我找不到类似的东西SomeTyrusHttpHandler。如何将 Jersey 和 Tyrus 组合在一个 Grizzly 服务器中?

0 投票
1 回答
845 浏览

java - 从服务器端点关闭连接的最佳做法是什么?

我设置了一个自定义配置器来获取 cookie 并对其进行处理。输出将添加到配置的用户属性中。

@OnOpen-annotated 方法中,我将该值与路径中的值进行比较。如果不匹配,那么我想关闭套接字,原因是 1008,违反策略。

实现这一目标的最佳方法是什么?

我可以:

  1. 手动调用@OnClose方法,传递原因
  2. 抛出异常并被@OnError调用
  3. 还有什么?

我希望关闭套接字并让 Tyrus 清理资源。我查看了文档,但没有看到如何清理资源的答案。任何帮助将不胜感激。谢谢。

0 投票
1 回答
480 浏览

java - 在 Tyrus Web Socket 中使用 OAuth

我想设置一个像Authorization: Bearer [oauth token]OAuth这样的标题。我正在尝试使用. 我无法想出确切的语法。如何解决这个问题?client.getProperties().put()

0 投票
1 回答
1338 浏览

java - 我的 Websocket 需要永远连接

更新 似乎在构造函数中的 org.glassfish.tyrus.core.BaseContainer 中,这两行运行速度非常慢:

在这两种方法的评论中提到 Android 是怎么回事,我是否使用了针对桌面的错误 Java 代码?


我使用的代码与来自:

Tyrus Websocket 文档:1.1.2 客户端端点

不知何故,连接大约需要 10 秒,特别是在我运行 Eclipse 的调试器时的这一行:

会不会和这个有关?可能相似的堆栈溢出问题

我真的迷路了,我觉得我是一个罕见的异常值,试图将 websockets 与 Java 客户端一起使用,而不是使用 Javascript 的浏览器。

0 投票
0 回答
1990 浏览

java - Java Spring 音频聊天

如何使用 Java 和 Spring 开发允许与用户进行音频聊天的 Web 应用程序?我在 Java Web 7 ([ https://tyrus.java.net/][Project Tyrus]) 中使用了 WebSocket,它非常适用于文本按摩。


但是对于音频聊天,我无法弄清楚。我尝试使用 WebRTC 来检测麦克风,这是客户端代码:

服务器端:

我有一个例外,我认为这是关于解码和编码,但我不知道如何处理它:

如何使用 Java(Tyrus 项目、websocket、Spring)进行音频聊天提前谢谢

0 投票
1 回答
487 浏览

java - Tyrus WebSockets (Java) - 如何设置客户端本地 IP 地址

使用 WebSockets (Tyrus) 时有没有办法指定本地 IP 地址和端口?

我正在寻找与Socket的完整 4 个参数构造函数相同的事情

编辑

我发现低级别的 Grizzly TCPNIOTransport确实有一个带有 local-address 的 connect() 方法,但我不知道如何让Tyrus 客户端使用它。

0 投票
0 回答
478 浏览

java - 关闭 Tyrus WebSocket 会话时的延迟

我正在使用 Tyrus 以独立模式(Grizzly 服务器)构建服务,我通过 WS 将大量二进制数据发送到客户端。在我的设置中,该服务位于代理服务器后面,因此发送的所有数据首先在代理处缓冲,然后在代理之后在 unix 发送缓冲区中缓冲。

在此传输的某个时刻,我想在服务器端关闭连接。当我这样做时,一旦发送缓冲区和代理中等待的所有数据,客户端就会收到 onClose 事件。

这种行为是可以理解的,其中所有消息都按顺序处理,因此关闭消息是客户端收到的最后一条消息。

但我需要的是一种实时关闭 WebSocket 连接的方法。就像底层的 TCP 连接将关闭,因此客户端将永远不会获得存储在发送缓冲区和代理中的剩余数据。

有谁知道如何使用 Tyrus API 创建这样的行为?

0 投票
0 回答
638 浏览

java - 如何防止 Tyrus websocket 客户端重新连接逻辑导致多个打开的套接字?

我已经看到这种行为偶尔会发生,但我无法始终如一地重现它。但似乎 Tyrus (v1.10) 中的重新连接逻辑可能会导致同一客户端的多个打开的套接字/线程。

导致连接多个套接字的过程如下所示:

  1. 客户端打开 Web 套接字到服务器。
  2. 服务器重新启动/在短时间内变得不可用。
  3. 客户端开始尝试重新连接。
  4. 服务器再次可用。
  5. 两个以上的线程获取到服务器的活动 Web 套接字。

我的重新连接处理程序如下所示:

我可以尝试在服务器端解决这个问题并验证每个连接对于客户端来说都是唯一的,但是我必须将新连接同步到单个线程,这甚至不能解决负载平衡服务器的情况.

0 投票
0 回答
922 浏览

java - Tyrus 客户端 websocket 消息处理程序

我遇到了客户端在 Eclipse 中无法以非调试模式启动的问题。消息确实出现在调试模式下。 如果还有其他人也面临同样的问题,请告诉我。

有什么想法吗?请让我知道配置。

0 投票
1 回答
2177 浏览

java - Tyrus 使用的每个 websocket 连接有多少个线程?

我正在尝试了解 Tyrus websocket 连接的线程模型。Tyrus 是否每个 websocket 连接使用一个线程?是否涉及一些线程池机制?

我试图找到一个文档来描述 Tyrus 实现的内部结构或 Java 的任何 websocket 实现,以了解线程模型是如何工作的,但我找不到任何东西。

有关线程模型如何维护 websocket 连接的任何信息都是有帮助的。

我正在尝试优化我的服务器以支持数千个 websocket 连接。现在只有 1000 个 websocket 连接,JVM 正在使用 ~1800 个线程!

更新1:

我在 Tomcat 8 上使用 Tyrus 1.9。

服务器终止了大约 500 个 websocket 连接,并启动了 500 个到不同服务器的 websocket 连接。所以我们现在在服务器上有大约 1000 个 websocket 连接。

我注意到的一件事是 TYRUS-275 问题,我猜这与我的情况有关。看起来 Tyrus 客户端默认为每个 websocket 连接创建 3 个线程。在我的情况下,我有大约 500 个连接,所以我最终应该有大约 1500 个线程仅用于传出 websocket 连接。

看起来如果我在 Tyrus 中启用共享容器,那么我可以从使用 SELECTOR 和 WORKER 线程池中受益。

我现在想知道如何优化线程池?500 个 websocket 连接需要多少个 SELECTOR 和 WORKER 线程?有公式吗?

更新 2:

当我连接到 JVM 时,我看到以下线程(仅列出有趣的线程):

我猜灰熊线程是 Tyrus 客户端为每个 websocket 创建的线程(顺便说一句,我想我没有仔细计算灰熊线程。我认为这三个线程的计数应该相同)。一个选择器两个工人,对吗?

我认为 http-apr-8080-exec-xxx 是tomcat创建的线程。这些线程是否在处理传入的 websocket 连接?我对以下线程更感兴趣:

  • WebSocketServer-localhost-ROOT-xxxx
  • tyrus-x-线程-xx
  • nioEventLoopGroup-xx
  • 保活定时器
  • http-apr-8080-exec-xxx

有谁知道每组线程的作用?有任何文件可以解释这一点吗?

看起来我的 Tomcat 设置为使用 APR 连接器我想知道在这种情况下使用 NIO 或 NIO2 可能是一个更好的主意?!