问题标签 [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.
android - 本机 Android 应用程序上的 Tyrus websocket 客户端在通过 WSS 从 websocket 服务器接收超过 16KB 的二进制消息时异常关闭
我在原生 Android 应用程序 (Java) 中使用 Tyrus websocket 客户端(版本 1.12)通过 WSS 连接到 websokcet 服务器。我能够发送和接收二进制消息。但是,当我尝试从服务器接收大于 16 KB 的二进制消息时,Tyrus websocket 客户端以“异常关闭”的原因关闭。
在 chrome (Android) 和 safari (iOS) 中,相同的服务器和相同的大型消息可以与 HTML5/JavaScript websocket 客户端正常工作。
我正在尝试调试 Tyrus websocket 客户端源代码,但它是一个长镜头。
只是想知道是否有人有任何类似的问题并可以提供任何线索。
谢谢和问候,阿迪亚。
java-websocket - 在没有 Web 服务器的情况下使用 Java Websocket API 实现
是否可以在 Java 中实现自定义 WebSocket 应用程序,而不必在 GlassFish、Tomcat、Jetty 等 Web 服务器上运行它?
我打算开发一个非常定制的应用程序,并希望实现我自己的方式来管理线程、监控、负载平衡、消息传递和类似的东西。(与例如 Java TCP 的 ServerSocket 相比)我知道有 Tyrus 容器,例如用于独立服务器和 Servlet 支持的 Grizzly 集成,这里还有 Jetty,但我不确定这是否是我正在寻找的。Grizzly 或 Jetty 本身可能是一个独立的解决方案吗?我知道 Tyrus 是 Grizzly WebSocket 实现的某种包装器,但老实说,我不确定这两者是如何相互连接的。
任何建议都非常受欢迎!谢谢!
java - Tyrus WebSocket 服务器独立与 CDI
是否可以将依赖注入与 Tyrus 独立服务器一起使用?
java - 使用 tyrus CLI 从批处理文件中进行 Websocket 测试
我正在尝试为我的 websocket 服务器实现一个小测试,然后我找到了Tyrus CLI。当我运行它时,它似乎从命令行获取输入,所以在下一步中我尝试了
连接已打开,但未执行 ping。我还尝试将ping
命令移动到文本文件中并执行
但它也只打开连接,不执行任何命令。
如何在不手动输入命令的情况下从命令行使用 Tyrus CLI?
glassfish-4 - Websocket @OnOpen 未在 Glassfish 4.1.1 Payara 4.1.1.115 Tyrus 1.11 上触发
我其实是在做噩梦。我的 webapp 使用 websockets 进行聊天,问题就来了:
使用 Glassfish 4.1u13 一切正常,直到我激活了访问日志监控。从那以后,每个 ws 请求都进行了 2 次,并且 Web 套接字无法进行握手。 https://java.net/jira/browse/GLASSFISH-21007
试图更新到玻璃鱼 4.1.1 -> 问题 PERSIST
尝试切换到 Payara 4.1.1.115(这是 glassfish 的修补版本),一切顺利。我现在可以在我的 Glassfish 实例中拥有 websocket 和访问日志记录。
几分钟后注意到,当我重新加载页面时,客户端应用程序和服务器之间的通信并不总是完成。检查网络 -> 正确握手,但无法交换数据。
然后在服务器端,我制作了 2 个系统:一个在请求 servlet 的过滤器中,一个在 websocket 端点中。每个请求都到达服务器并进行握手但有时@OnOpen 不会被调用,即使 wss 升级到 101。这怎么可能?尝试更新到 Tyrus 1.12(payara 使用 1.11)并将其降级到 1.8.1(这是运行 Glassfish 4.1u13 使用的版本),但没有任何反应。
我如何调试这种行为?
java - ContainerProvider 的独立 Java Websocket 客户端 NoClassDefFoundError
我是 Java 新手,但我必须用它来做一个与 WebSocket 相关的小型项目。
因此,我在 VirtualBox 中的 CentOS 7 上安装了 JDK 1.8.0 和 NetBeans 8.1。
我在pom.xml中添加了tyrus-standalone-client-jdk 1.12插件来制作独立的 Websocket 客户端,并且构建良好。但是,我遇到了以下错误:
我做了更多搜索,发现根据Oracle文档,API的“容器实现的完全限定类名ContainerProvider
必须列在实现JAR文件的META-INF/services/javax.websocket.ContainerProvider文件中”。ServiceLoader
因此,我将serviceloader-maven-plugin添加到 pom.xml 中。结果确实生成了META-INF/services/javax.websocket.ContainerProvider文件,但是没有任何内容,并且运行时错误继续存在。我尝试手动修改下面的内容并将其重新打包到 JAR 中,但没有奏效:
- org.glassfish.tyrus.container.inmemory.InMemoryContainerProvider
- org.glassfish.tyrus.client.ClientManager
我附上了 Java 文件和pom.xml。我已经工作了几个小时并且不知道问题出在哪里,所以对这个线程的任何回复将不胜感激。
非常感谢。
===========LIST1:pom.xml===========
===========LIST2: Switchclient.java===========
package org.sample.switchclient;
java - 如何从 Tyrus websocket 客户端获取本地 IP 地址
我正在编写一个 Java websocket 客户端,它需要知道自己的 IP 地址,这意味着用于连接到服务器端点的接口的 IP 地址。
由于客户端可能会更改地址,因此无论何时(重新)连接到服务器,都必须更新本地地址。这很容易使用 Jetty 的客户端实现,因为它的Session类有一个getLocalAddress()方法。
而泰鲁斯的会话班则缺乏这种能力。一个简单的解决方法是使用普通的旧套接字。每当onOpen
调用客户端时,我只需打开一个到服务器的常规 TCP 套接字,获取套接字的本地地址,然后关闭它。但这很浪费而且容易出错,所以我更愿意深入研究 Tyrus 并从它的套接字中获取本地地址。有没有办法做到这一点?
android - 在带有 Proguard 的 Android 中使用 Tyrus Websocket 客户端
我正在尝试在 Android 中使用 Tyrus (org.glassfish.tyrus.bundles:tyrus-standalone-client:1.10)。这是我的proguard相关部分:
我打电话给ClientManager connectToServer,这个方法没有返回并挂起。但如果我禁用proguard,它就可以工作。我怎样才能让它在带有proguard的Android中工作?
authentication - 带有 Tyrus websocket 的 Spring boot 1.3.1 导致身份验证异常
我们最近从传统的 spring 项目迁移到 Spring boot 1.3.1。我们现有的客户使用 Tyrus 1.12 作为 websocket 客户端。
升级后发现客户端不再连接并抛出AuthenticationException。奇怪的是,他们能够在服务器重新启动后第一次连接,并在抛出 AuthenticationException 后不久。进一步挖掘,我发现 Tyrus 最初收到 401 并随后传递凭据。服务器日志通过首先分配 ROLE_ANONYMOUS 和正确的角色 ROLE_GUEST 来指示相同的行为。
似乎在协商之后,服务器关闭连接并断开连接。
在使用带有 Tyrus 的 spring stomp websocket 客户端时,我观察到了相同的行为。
当凭据在标头中发送时,相同的服务器设置工作正常。
这将不起作用,因为凭据不在标题中
我不明白为什么它以一种方式而不是另一种方式工作。
升级到 spring-boot 后,我们的软件不再向后兼容,并且必须要求我们所有的外部客户端在收到 401 之前在 header 中注入授权。
有人可以帮忙吗?
java - Java Websockets中的起源检查以防止CSRF
我正在以编程方式部署 Java Websocket 端点(JSR356 3.1),我希望它验证Origin
请求标头值以减轻 CSRF 攻击,并且只接受Host
与Origin
标头值匹配的握手请求。
在我看来,要走的路是覆盖方法:
ServerEndpointConfig.Configurator.checkOrigin(String originHeaderValue)
(Tomcat 8提供的实现总是返回true
),但我看到的问题是这个方法只有一个参数,我错过了主机头值来比较这个值。
此外,此类不提供任何返回此信息的方法,因此我认为此方法无用,除非您将原始标头值与先前已知的主机值或值集进行比较,但这也没有任何意义,因为我的应用程序可以在不同的、不断变化的主机名或 IP 下看到。
我正在考虑在modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response)
可以读取所有标头值的实现中执行此验证,但我很确定我误解了一些东西。
所以我的问题是:
执行此验证的正确方法是什么?
谢谢,纳乔