问题标签 [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.
java - WebSocket EndPoints 注解中编码器列表或解码器列表的用例是什么?
我正在学习 tyrus WebSocket 实现。但我不明白为什么以及何时在 websocket 端点中需要一个以上的编码器或解码器。例如:
解码器和编码器列表中只有一个解码器和编码器。由于这些是解码器或编码器阵列,因此我可以一次使用多种类型的编码器或解码器。但是在随后提到的api描述中,
websocket 运行时将使用列表中能够解码消息的第一个解码器,而忽略剩余的解码器。
如果它总是使用列表的第一个元素,那么 WebSockets API 中多个编码器或解码器的用例是什么?
编辑后
服务器发送给客户端:
客户端发送到服务器:
客户端使用 MessageEncoder 类发送消息,而服务器有两个编码器和解码器,包括 TextStreamMessageEncoder 或解码器和 MessageEncoder 或解码器。那么当客户端向服务器发送消息时将使用哪个解码器?
java - JSR 356 WebSocket 最大消息大小配置失败
我正在使用 Websocket 进行数据事务,客户端通过 Tyrus 客户端端点 api 进行侦听。从服务器传输大小为 5kb 或更少的消息时,它会顺利到达客户端,但任何大于 5kb 的消息都不会到达客户端,并且该特定会话上的通信已经消失。因此,我尝试在会话中将消息缓冲区大小设置如下,但它始终保持为零,也尝试在设置后立即在配置下方打印,但这也返回零。
甚至尝试在客户端端点消息侦听器中配置消息大小
那么如何增加 websocket 中的消息缓冲区大小呢?
java - 启用客户端共享容器后,Tyrus 客户端无法在服务器重新启动时重新连接
这是场景:
- Websocket 服务器已启动
- Tyrus 客户端共享容器已启用
- Tyrus 客户端连接到服务器(一切正常)
- Websocket 服务器重启
- Tyrus 客户端无法连接到服务器并在服务器启动后抛出以下异常:
javax.websocket.DeploymentException: Connection failed
- 如果客户端应用程序重新启动,它可以再次连接到服务器
注意:如果禁用Tyrus 客户端共享容器,则不会发生此问题。
堆栈跟踪:
NPE 来自if (runners.length == 1) {
grizzly 项目文件 RoundRobinConnectionDistributor.java:146 中的行
看起来是runners
这样null
。
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:
java - Javax Websocket 由于非法 UTF-8 序列而关闭
我正在用 Java 编写一个 Websocket 客户端,使用 javax.websocket API,并org.glassfish.tyrus
作为实现。
通常一切正常,但有时,当我收到非常大的字符串时,连接会以神秘的“非法 UTF-8 序列”作为关闭原因关闭。
输出:
我猜要么字符串太大,要么字符串包含任何不兼容 UTF-8 的字符。
有没有办法获得有关导致此问题的实际字符串/数据包/帧的更多信息?或者,如果有办法告诉 tyrus 忽略任何编码问题,只需将原始字符串传递给我,让我处理它?
如果没有,是否还有另一个 java websockets 客户端可以通过套接字传输字符串并且不进行任何验证,只让我处理响应?
感谢任何反馈。
java - 收到“未收到握手响应”。关闭 websocket 后
我正在使用 tyrus websocket 客户端(1.11)连接到 websocket。
我正在运行本地wscat
服务器 ( wscat --listen
) 来测试我的连接。
我的客户端所做的是它连接到 websocket,发送一个文本字符串,后跟一个二进制负载(0xb5,0xb2,0xb1,0xb0,0xb1,0xb2,0xc6),然后是另一个字符串,然后断开连接。
这是服务器看到的(这正是我所期望的):
注意:进行连接的实体、Monkey
类扩展Thread
和异步运行,因此某些日志行可能是乱序的。
不过,客户端的情况并不那么乐观。虽然日志同意建立了连接,发送了三个块,并且连接已关闭,但它也给了我一个堆栈跟踪,表明连接失败,因为没有收到握手响应(请参阅此处的完整日志):
为什么会有明显的第二次连接尝试?这里发生了什么?
我输入了几个时间戳来看看实际发生了什么:
我实际得到的结果表明我无法连接(但我确实发送了这些消息,不是吗?)
当我与 ws 进行交易时,连接调用似乎被阻止了。它是否假设存在错误,因为连接在onOpen
回调结束时关闭?
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
错误
任何想法?
websocket - 为什么客户端 websocket 关闭代码与服务器代码不匹配?
我有一个 Spring Boot Tomcat 服务器,它正在处理来自正在使用的客户端的 websocket 连接:
- 套接字火箭
- 泰鲁斯
我发现服务器提供的关闭代码往往不是客户端读取的关闭代码。
对于SocketRocket,我在服务端关闭websocket,代码1000,客户端经常读取1001。
对于 Tyrus,我使用代码 1011 关闭 websocket,客户端读取 1006 或 1011。
来自RFC 6455的关闭代码的描述:
1000表示正常关闭,表示建立连接的目的已经实现。
1001 表示端点正在“离开”,例如服务器关闭或浏览器已离开页面。
1006 是保留值,绝不能在端点关闭控制帧中设置为状态码。它被指定用于期望状态代码指示连接已异常关闭的应用程序,例如,没有发送或接收关闭控制帧。
1011 表示服务器正在终止连接,因为它遇到了阻止它完成请求的意外情况。
我已经在服务器上使用 Wireshark 验证了传出的关闭代码。
作为将信息从服务器传递到客户端的一种方式,关闭代码是否不可靠?在关闭 websocket 之前,我是否需要在应用层实现一些传递这些信息的东西?
java - 是否可以通过 Spring WebSocket 发送同步消息?
我有一个 Spring 应用程序,它通过Spring WebSocket将消息异步发送到另一台服务器。但是对于我需要同步发送消息的特定情况,我应该使用来自服务器的传入响应继续该过程。
我不想只为此进程进行 HTTP 调用,因为已经有一个打开的 TCP 连接,我想使用它。
例如,在 Tyrus WebSocket 实现中,可以通过同步或异步发送消息
相关 Tyrus 文档链接。
顺便说一句,我不使用sub-protocol
带有 Spring WebSocket 的类似 STOMP。
json - 在 jsr 356 中将集合编码为 json 数组
我正在学习 websockets,我的 webapp 正在使用jsr 356 library。我按照教程进行操作,可以对 POJO 进行编码/解码,但是我找不到有关如何将数组或集合序列化为 JSON 的示例。
这就是我对数据进行编码的方法:
这就是我将数据发送到编码器的方式:
这是我得到的例外:
谁能给我一个关于如何做的提示?
谢谢