问题标签 [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.
javascript - Tomcat WebSocket 中的“无法解压压缩的 WebSocket 帧”错误
我有一个 JavaScript WebSocket 客户端和 Tomcat WebSocket 服务器(JSR 356)。每当我尝试从 JS 客户端向服务器发送文本数据时,都会收到以下错误
无法解压压缩的 WebSocket 帧
WebSocket 会话已使用 CloseCode 关闭1002
。此问题仅发生在特定机器(JS ClientEndpoint)中。此外,当遇到此错误时,我从 ClientEndpoint 发送的短信被 ServerEndpoint 错误接收
我尝试在互联网上寻找解决此问题的方法。但没有什么是相关的。有人对此有解决方案吗?
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。有什么办法吗?
tomcat - Tomcat:在同一个 Web 应用程序中使用 servlet 和 websocket (jsr356)
我在tomcat中使用Guice-servlets和websocket创建了一个示例webapp,现在一旦使用guice过滤器websocket停止工作
基本信息:
在我的 web.xml 中,我使用初始化 GuiceservletGuiceBasedListener
GuieBasedListener
将所有请求绑定/*
到的代码MyDispatcher
MyDispatcher
仅以字符串响应的代码
我还有一个用于 Websocket 的 @ServerEndPoint
观察:
- 现在,如果我运行应用程序并点击http://app:8080/test它会返回
SUCCESS
- 但是,如果我尝试使用 ws://app:8080/websocket/chat2 连接到 websocket,它会失败
现在,如果我
serve("/*").with(MyDispatcher.class);
基本上评论如果我们关闭 guice 路由 websocket 开始工作如果我关闭 guice-servlet 但在 web.xml 中添加一个 servlet 映射,如下所示 websocket 仍然有效
< servlet-mapping >
< servlet-name > HelloWorld< / servlet-name >
< url-pattern > /* < / url-pattern >
< / servlet-mapping >
我错过了什么或做错了什么?
编辑:
观察-连续:
- 我所做的是定义了一个简单的过滤器,它只响应
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
我将 web.xml 更改为下面,guice 和 websocket 现在工作正常.. 所以我认为 Guice 不尊重在 GuiceFilter 之后注册的 WsFilter
/li>
TOMCAT 8.0、Window 7、Java 1.7、Guice 4.0、Guice-servlet-4.0
osgi - 从 OSGi Bundle 注册 ServletRequestListener
我有一个打包在 OSGi 包中的 JSR-356 (WebSocket API) 代码。如果需要,servlet 通过 Apache Felix 加载代码。
我想注册一个 ServletRequestListener,我通常会把它放在 web 描述符中:
但由于捆绑不在无法工作的类路径中。
如何注册 ServletRequestListener?我在想也许会有一种扫描注释的方法,但我不确定如何设置它。我的另一个担忧是许多用户禁用扫描以缩短启动时间。
侦听器的工作是初始化 HttpSession,以便我可以在 WebSocket 握手中检索 ServletContext。如果有一种方法可以在没有听众的情况下实现这一目标,那么这对我来说会更好。
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。
java - NoSuchMethodError 使用 dropwizard websocket jee7 捆绑服务器
我使用 Dropwizard 作为 REST 服务器,使用 dropwizard-websocket-jee7-bundle 来启用 websocket。
对于我使用这个例子的 websocket 服务器。
测试 websocket 服务器独立工作正常,但与 Dropwizard 结合使用时,当客户端尝试连接(到 ws://localhost:port/actions)时,它会收到 500 内部服务器错误(下面的错误日志)。
我猜有一些错误或缺失的配置,但我不知道我们在哪里。
服务器示例:
设备WebSocket服务器:
设备会话处理程序:
依赖项:
错误日志:
编辑:添加依赖项列表。
java - 通过 WebSocket 发送数据时出现 TimeoutException
我在java.util.concurrent.TimeoutException
通过 WebSocket(Tomcat8 JSR-356)发送数据时遇到。请参阅下面给出的跟踪
我想知道除了网络延迟相关的问题外,是否有任何情况下会出现此异常
注意:我随机面临这个异常。Tomcat 版本是8.0.20
java - 使用 SSL 的 Websocket 客户端端点
我编写了一个带注释的示例客户端端点,如下所示,
但是,当我尝试连接时,
我得到以下异常,
我错过了什么吗?您能否分享一下可行的基于 Java 的 ssl 客户端 Web 套接字端点
谢谢
java - Java WebSocket 客户端突然关闭连接
我正在尝试使用 WebSocket 通过服务器模拟客户端到客户端的通信。
这个想法是:客户端A想要向客户端B发送消息。A向服务器发送消息,服务器通过查找会话映射来确定B是否有活动会话。然后服务器通过B的会话 将消息转发给B。
A和B都能够连接到服务器并能够将消息发送到服务器。但是服务器没有发回任何东西(@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()
回调有时会被调用,有时不会被调用。当它被调用时,会显示来自A到B的消息,而不是从B到A的消息。
即使有两个不同的客户,为什么会发生这种事情?不应该显示两条消息。两个客户端都是从同一个 Java 控制台应用程序模拟的。
更新
我已经解决了仅显示一个客户端消息的问题,方法是在每次收到消息时在新线程上删除服务器上的消息处理(我后来更改了我的代码)。但是仍然存在一个问题,即仍然存在仅显示一个客户的消息的情况(尽管大约在 4 次执行中出现一次)。
我想了解这种行为的原因
java - Jetty 中的 JSR-356 javax websockets(嵌入式和非嵌入式)
鉴于:
我想将打包为 WAR 的 webapp 部署web.xml
到 Jetty 服务器。
在该应用程序中,我希望能够配置 JSR-356 指定的 javax websocket 端点。我更喜欢通过 提供这些端点ServerEndpointConfig
,而不是注释扫描。
有许多资源可以通过嵌入式 Jetty 来说明这一点,并利用了众所周知的WebSocketServerContainerInitializer.configureContext(context);
API。我不能那样做,很明显。
还有其他的,直接跳转ServletContextListener
并获得ServerContainer
via着名的context.getAttribute("javax.websocket.server.ServerContainer"
)。到目前为止,我已经NULL
通过这个 API 获得了很多东西,所以显然没有添加容器。
问题:
缺少的配置是什么?可以通过最好的方式完成web.xml
吗?如果它是关于配置文件的,jetty.xml
或者jetty.ini
- 示例会很好,再次,最好是xml
语法。
更新:
根据下面的答案(已接受的答案)以及我实际上试图在这里描述的 - 已知的配置方式绝对可以正常工作。说已知我的意思是通过添加到非嵌入式码头的--module=websocket
一些文件,或者通过调用嵌入式码头。*.ini
WebSocketServerContainerInitializer.configureContext
所以改写这个问题:有人有任何经验/知识可以通过纯粹XML
的配置来启用 websocket 模块吗?