问题标签 [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 投票
2 回答
2133 浏览

java - WebSocket EndPoints 注解中编码器列表或解码器列表的用例是什么?

我正在学习 tyrus WebSocket 实现。但我不明白为什么以及何时在 websocket 端点中需要一个以上的编码器或解码器。例如:

解码器和编码器列表中只有一个解码器和编码器。由于这些是解码器或编码器阵列,因此我可以一次使用多种类型的编码器或解码器。但是在随后提到的api描述中,

websocket 运行时将使用列表中能够解码消息的第一个解码器,而忽略剩余的解码器。

如果它总是使用列表的第一个元素,那么 WebSockets API 中多个编码器或解码器的用例是什么?

编辑后

服务器发送给客户端:

客户端发送到服务器:

客户端使用 MessageEncoder 类发送消息,而服务器有两个编码器和解码器,包括 TextStreamMessageEncoder 或解码器和 MessageEncoder 或解码器。那么当客户端向服务器发送消息时将使用哪个解码器?

0 投票
2 回答
3316 浏览

java - JSR 356 WebSocket 最大消息大小配置失败

我正在使用 Websocket 进行数据事务,客户端通过 Tyrus 客户端端点 api 进行侦听。从服务器传输大小为 5kb 或更少的消息时,它会顺利到达客户端,但任何大于 5kb 的消息都不会到达客户端,并且该特定会话上的通信已经消失。因此,我尝试在会话中将消息缓冲区大小设置如下,但它始终保持为零,也尝试在设置后立即在配置下方打印,但这也返回零。

甚至尝试在客户端端点消息侦听器中配置消息大小

那么如何增加 websocket 中的消息缓冲区大小呢?

0 投票
1 回答
1544 浏览

java - 启用客户端共享容器后,Tyrus 客户端无法在服务器重新启动时重新连接

这是场景:

  1. Websocket 服务器已启动
  2. Tyrus 客户端共享容器已启用
  3. Tyrus 客户端连接到服务器(一切正常)
  4. Websocket 服务器重启
  5. Tyrus 客户端无法连接到服务器并在服务器启动后抛出以下异常:

javax.websocket.DeploymentException: Connection failed

  1. 如果客户端应用程序重新启动,它可以再次连接到服务器

注意:如果禁用Tyrus 客户端共享容器,则不会发生此问题。

堆栈跟踪:

NPE 来自if (runners.length == 1) {grizzly 项目文件 RoundRobinConnectionDistributor.java:146 中的行

看起来是runners这样null

0 投票
1 回答
3833 浏览

java - javax.websockets / Tyrus 中的线程

我正在编写一个从 websocket 服务器发送和接收消息的 Java 应用程序。当应用程序收到消息时,可能需要一些时间来处理它。因此,我尝试使用多个线程来接收消息。据我了解Grizzly,有选择器线程和工作线程。默认情况下有 1 个选择器线程和 2 个工作线程,在下面的示例中,我试图将它们分别增加到 5 和 10。在下面的示例中,我正在暂停调用onMessage方法 10 秒来模拟输入信息的处理。信息每秒出现一次,因此 10 个线程应该能够处理流量。当我分析运行时,只有 1 个选择器线程正在运行,2 个工作线程。此外,消息仅以 10 秒的间隔接收。表明只有 1 个线程在处理流量 - 我觉得这很奇怪。在分析期间,一个工作线程例如Grizzly(1)接收发送的第一条消息。然后 10 秒后,'Grizzly(2)' 收到第二条消息 - 然后Grizzly(2)继续接收消息,并且Grizzly(1)不执行任何操作。

有人可以解释一下这种奇怪的行为以及如何将其更改为例如 10 个线程不断排队等待消息吗?

主要的:

WebsocketTextClient.java:

0 投票
2 回答
1749 浏览

java - Javax Websocket 由于非法 UTF-8 序列而关闭

我正在用 Java 编写一个 Websocket 客户端,使用 javax.websocket API,并org.glassfish.tyrus作为实现。

通常一切正常,但有时,当我收到非常大的字符串时,连接会以神秘的“非法 UTF-8 序列”作为关闭原因关闭。

输出:

我猜要么字符串太大,要么字符串包含任何不兼容 UTF-8 的字符。

有没有办法获得有关导致此问题的实际字符串/数据包/帧的更多信息?或者,如果有办法告诉 tyrus 忽略任何编码问题,只需将原始字符串传递给我,让我处理它?

如果没有,是否还有另一个 java websockets 客户端可以通过套接字传输字符串并且不进行任何验证,只让我处理响应?

感谢任何反馈。

0 投票
2 回答
6182 浏览

java - 收到“未收到握手响应”。关闭 websocket 后

我正在使用 tyrus websocket 客户端(1.11)连接到 websocket。

我正在运行本地wscat服务器 ( wscat --listen) 来测试我的连接。

我的客户端所做的是它连接到 websocket,发送一个文本字符串,后跟一个二进制负载(0xb5,0xb2,0xb1,0xb0,0xb1,0xb2,0xc6),然后是另一个字符串,然后断开连接。

这是服务器看到的(这正是我所期望的):

注意:进行连接的实体、Monkey类扩展Thread和异步运行,因此某些日志行可能是乱序的。

不过,客户端的情况并不那么乐观。虽然日志同意建立了连接,发送了三个块,并且连接已关闭,但它也给了我一个堆栈跟踪,表明连接失败,因为没有收到握手响应(请参阅此处的完整日志):

为什么会有明显的第二次连接尝试?这里发生了什么?

我输入了几个时间戳来看看实际发生了什么:

我实际得到的结果表明我无法连接(但我确实发送了这些消息,不是吗?)

当我与 ws 进行交易时,连接调用似乎被阻止了。它是否假设存在错误,因为连接在onOpen回调结束时关闭?

0 投票
0 回答
1540 浏览

jakarta-ee - connectToServer 上的 Websocket javax.websocket.DeploymentException

环境:

  • NetBeans 8.0.2
  • 玻璃鱼 4.1
  • 泰鲁斯 1.11

我正在尝试在http://localhost:8080/doit/changes中测试 websocket,但我正在测试javax.websocket.DeploymentException

ToDoChangeTracker.java

ToDoChangesTrackerIT.java

我创建了一个 javascript 文件来测试 websocket,它确实有效,结果是

连接到 ws://localhost:8080/doit/changes

websocket.js

错误

任何想法?

0 投票
1 回答
4096 浏览

websocket - 为什么客户端 websocket 关闭代码与服务器代码不匹配?

我有一个 Spring Boot Tomcat 服务器,它正在处理来自正在使用的客户端的 websocket 连接:

  1. 套接字火箭
  2. 泰鲁斯

我发现服务器提供的关闭代码往往不是客户端读取的关闭代码。

对于SocketRocket,我在服务端关闭websocket,代码1000,客户端经常读取1001。

对于 Tyrus,我使用代码 1011 关闭 websocket,客户端读取 1006 或 1011。

来自RFC 6455的关闭代码的描述:

1000表示正常关闭,表示建立连接的目的已经实现。

1001 表示端点正在“离开”,例如服务器关闭或浏览器已离开页面。

1006 是保留值,绝不能在端点关闭控制帧中设置为状态码。它被指定用于期望状态代码指示连接已异常关闭的应用程序,例如,没有发送或接收关闭控制帧。

1011 表示服务器正在终止连接,因为它遇到了阻止它完成请求的意外情况。

我已经在服务器上使用 Wireshark 验证了传出的关闭代码。

作为将信息从服务器传递到客户端的一种方式,关闭代码是否不可靠?在关闭 websocket 之前,我是否需要在应用层实现一些传递这些信息的东西?

0 投票
1 回答
1617 浏览

java - 是否可以通过 Spring WebSocket 发送同步消息?

我有一个 Spring 应用程序,它通过Spring WebSocket将消息异步发送到另一台服务器。但是对于我需要同步发送消息的特定情况,我应该使用来自服务器的传入响应继续该过程。

我不想只为此进程进行 HTTP 调用,因为已经有一个打开的 TCP 连接,我想使用它。

例如,在 Tyrus WebSocket 实现中,可以通过同步或异步发送消息

相关 Tyrus 文档链接

顺便说一句,我不使用sub-protocol带有 Spring WebSocket 的类似 STOMP。

0 投票
1 回答
669 浏览

json - 在 jsr 356 中将集合编码为 json 数组

我正在学习 websockets,我的 webapp 正在使用jsr 356 library。我按照教程进行操作,可以对 POJO 进行编码/解码,但是我找不到有关如何将数组或集合序列化为 JSON 的示例。

这就是我对数据进行编码的方法:

这就是我将数据发送到编码器的方式:

这是我得到的例外:

谁能给我一个关于如何做的提示?

谢谢