问题标签 [jsr356]

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

javascript - Tomcat WebSocket 中的“无法解压压缩的 WebSocket 帧”错误

我有一个 JavaScript WebSocket 客户端和 Tomcat WebSocket 服务器(JSR 356)。每当我尝试从 JS 客户端向服务器发送文本数据时,都会收到以下错误

无法解压压缩的 WebSocket 帧

WebSocket 会话已使用 CloseCode 关闭1002。此问题仅发生在特定机器(JS ClientEndpoint)中。此外,当遇到此错误时,我从 ClientEndpoint 发送的短信被 ServerEndpoint 错误接收

我尝试在互联网上寻找解决此问题的方法。但没有什么是相关的。有人对此有解决方案吗?

0 投票
0 回答
355 浏览

websocket - 如何在 PAX-Web 中注册 JSR-356 Websocket?(在捆绑包中,不是 WAR)

我对 PAX-Web 有疑问。我尝试将 Websocket 服务注册为声明性的,但无法从 Web 访问它。我已经尝试了给定的 websocket-jsr356-6.0.3.war,它工作正常。正如我所看到的,WAR 文件对 org.osgi.service.http.HttpContext 的处理方式不同。我尝试了以下场景:

场景 1 - OSGi R6 白板 HTTP 方法

创建一个 ServletContextHelper:

并添加 Websocket 端点:

日志显示端点已被捕获。我已经调试并且 Pax-Web 正在注册它。

日志显示以下行:

但是无法通过以下 URL 访问 websocket:ws://localost:8181/test/chat/testroom

场景 2 - 注册的 HttpContext 上的 Pax-Web 属性(使用 JAX-RS 可以工作)

创建 HttpContext 实例:(利用 OSGi 给定的 Helper 抽象类):

和 Websocket 端点:

但是无法通过以下 URL 访问 websocket:ws://localost:8181/test/chat/testroom

我怎样才能实现 webcsocket 可用?我不想将我的捆绑包重新打包为 WAB。有什么办法吗?

0 投票
1 回答
1913 浏览

tomcat - Tomcat:在同一个 Web 应用程序中使用 servlet 和 websocket (jsr356)

我在tomcat中使用Guice-servlets和websocket创建了一个示例webapp,现在一旦使用guice过滤器websocket停止工作

基本信息:

在我的 web.xml 中,我使用初始化 GuiceservletGuiceBasedListener

GuieBasedListener将所有请求绑定/*到的代码MyDispatcher

MyDispatcher仅以字符串响应的代码

我还有一个用于 Websocket 的 @ServerEndPoint

观察:

  1. 现在,如果我运行应用程序并点击http://app:8080/test它会返回SUCCESS
  2. 但是,如果我尝试使用 ws://app:8080/websocket/chat2 连接到 websocket,它会失败
  3. 现在,如果我serve("/*").with(MyDispatcher.class);基本上评论如果我们关闭 guice 路由 websocket 开始工作

  4. 如果我关闭 guice-servlet 但在 web.xml 中添加一个 servlet 映射,如下所示 websocket 仍然有效

    < servlet-mapping > < servlet-name > HelloWorld< / servlet-name > < url-pattern > /* < / url-pattern > < / servlet-mapping >

我错过了什么或做错了什么?


编辑:

观察-连续:

  1. 我所做的是定义了一个简单的过滤器,它只响应FILTER.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.getOutputStream().print("FILTER"); }

并将我的 web.xml 更改为

现在按预期http://localhost:8080/app/x返回。FILTER但是尝试与 websocket 连接失败,因为请求显示了这样的内容。我还注意到,当我更改字符串时,在响应更改中返回内容长度,这意味着在 tomcat 为 websocket 处理它之前MyFilter已到达请求。MyFilter

在此处输入图像描述

  1. 我将 web.xml 更改为下面,guice 和 websocket 现在工作正常.. 所以我认为 Guice 不尊重在 GuiceFilter 之后注册的 WsFilter

    /li>

TOMCAT 8.0、Window 7、Java 1.7、Guice 4.0、Guice-servlet-4.0

0 投票
1 回答
135 浏览

osgi - 从 OSGi Bundle 注册 ServletRequestListener

我有一个打包在 OSGi 包中的 JSR-356 (WebSocket API) 代码。如果需要,servlet 通过 Apache Felix 加载代码。

我想注册一个 ServletRequestListener,我通常会把它放在 web 描述符中:

但由于捆绑不在无法工作的类路径中。

如何注册 ServletRequestListener?我在想也许会有一种扫描注释的方法,但我不确定如何设置它。我的另一个担忧是许多用户禁用扫描以缩短启动时间。

侦听器的工作是初始化 HttpSession,以便我可以在 WebSocket 握手中检索 ServletContext。如果有一种方法可以在没有听众的情况下实现这一目标,那么这对我来说会更好。

0 投票
1 回答
1273 浏览

spring - 将 Java WebSockets (JSR-356) 与 SpringBoot 集成

我在 SpringBoot 中部署 websocket 时遇到问题。我已经尝试了很多基于https://spring.io/blog/2013/05/23/spring-framework-4-0-m1-websocket-support的方法,使用 Java API for WebSocket (JSR-356)使用 Spring Boot等,没有任何运气。

这是我正在尝试的:

网络套接字:

应用程序属性:

主类:

根据上面的博客文章,这应该是所需要的。我还尝试了描述的第二种方法,它涉及一个没有运气的 bean:

我正在尝试打开与 ws://localhost:8080/api/socket/John 的连接,并希望收到带有路径名的响应:

结果是握手期间的 404。

0 投票
1 回答
286 浏览

java - NoSuchMethodError 使用 dropwizard websocket jee7 捆绑服务器

我使用 Dropwizard 作为 REST 服务器,使用 dropwizard-websocket-jee7-bundle 来启用 websocket。
对于我使用这个例子的 websocket 服务器。
测试 websocket 服务器独立工作正常,但与 Dropwizard 结合使用时,当客户端尝试连接(到 ws://localhost:port/actions)时,它会收到 500 内部服务器错误(下面的错误日志)。
我猜有一些错误或缺失的配置,但我不知道我们在哪里。

服务器示例:

设备WebSocket服务器:

设备会话处理程序:

依赖项:

错误日志:

编辑:添加依赖项列表。

0 投票
1 回答
1070 浏览

java - 通过 WebSocket 发送数据时出现 TimeoutException

我在java.util.concurrent.TimeoutException通过 WebSocket(Tomcat8 JSR-356)发送数据时遇到。请参阅下面给出的跟踪

我想知道除了网络延迟相关的问题外,是否有任何情况下会出现此异常

注意:我随机面临这个异常。Tomcat 版本是8.0.20

0 投票
0 回答
604 浏览

java - 使用 SSL 的 Websocket 客户端端点

我编写了一个带注释的示例客户端端点,如下所示,

但是,当我尝试连接时,

我得到以下异常,

我错过了什么吗?您能否分享一下可行的基于 Java 的 ssl 客户端 Web 套接字端点

谢谢

0 投票
0 回答
1020 浏览

java - Java WebSocket 客户端突然关闭连接

我正在尝试使用 WebSocket 通过服务器模拟客户端到客户端的通信。

这个想法是:客户端A想要向客户端B发送消息。A向服务器发送消息,服务器通过查找会话映射来确定B是否有活动会话。然后服务器通过B的会话 将消息转发给B。

AB都能够连接到服务器并能够将消息发送到服务器。但是服务器没有发回任何东西(@OnMessage没有被触发)。在服务器端,我得到了这个:java.io.IOException: An existing connection was forcibly closed by the remote host
在客户端,我在OnError()方法中得到了这个:

这是我从 Wireshark 得到的:

最后两个 Wireshark 条目显示客户端重置了连接(也许这就是服务器提升连接的原因IOException

这是我的客户端代码:

这是我的服务器端代码:

我首先尝试在 Glassfish 上运行它,但没有任何正确的错误消息。然后我在 Wildfly 上运行它并获得了IOException.

我的问题是:

1. 在我的实现上下文中,一个客户端如何使用 WebSocket 协议通过服务器与另一个客户端通信?

2. 我的实施中存在哪些问题?

更新

所以我找到了原因ClassCastException。我试图将纯字符串解析为JSON. 我修复了它,这是我的新客户端端点:

现在的问题是onMessage()回调有时会被调用,有时不会被调用。当它被调用时,会显示来自AB的消息,而不是从BA的消息。
即使有两个不同的客户,为什么会发生这种事情?不应该显示两条消息。两个客户端都是从同一个 Java 控制台应用程序模拟的。

更新
我已经解决了仅显示一个客户端消息的问题,方法是在每次收到消息时在新线程上删除服务器上的消息处理(我后来更改了我的代码)。但是仍然存在一个问题,即仍然存在仅显示一个客户的消息的情况(尽管大约在 4 次执行中出现一次)。
我想了解这种行为的原因

0 投票
1 回答
1313 浏览

java - Jetty 中的 JSR-356 javax websockets(嵌入式和非嵌入式)

鉴于:

我想将打包为 WAR 的 webapp 部署web.xml到 Jetty 服务器。

在该应用程序中,我希望能够配置 JSR-356 指定的 javax websocket 端点。我更喜欢通过 提供这些端点ServerEndpointConfig而不是注释扫描。

有许多资源可以通过嵌入式 Jetty 来说明这一点,并利用了众所周知的WebSocketServerContainerInitializer.configureContext(context);API。我不能那样做,很明显。

还有其他的,直接跳转ServletContextListener并获得ServerContainervia着名的context.getAttribute("javax.websocket.server.ServerContainer")。到目前为止,我已经NULL通过这个 API 获得了很多东西,所以显然没有添加容器。

问题:

缺少的配置是什么?可以通过最好的方式完成web.xml吗?如果它是关于配置文件的,jetty.xml或者jetty.ini- 示例会很好,再次,最好是xml语法。

更新:

根据下面的答案(已接受的答案)以及我实际上试图在这里描述的 - 已知的配置方式绝对可以正常工作。说已知我的意思是通过添加到非嵌入式码头的--module=websocket一些文件,或者通过调用嵌入式码头。*.iniWebSocketServerContainerInitializer.configureContext

所以改写这个问题:有人有任何经验/知识可以通过纯粹XML的配置来启用 websocket 模块吗?