问题标签 [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.
java - Java WebSocket API:将服务限制在某些域
如HTML5Rocks WebSockets 教程中提到的,
服务器决定是否将其服务提供给所有客户端或仅位于一组定义良好的域上的客户端可用。
好的,如何使用Java API for WebSocket 1.0 (JSR 356)(在Tomcat上运行)来做到这一点?
java - Websocket 连接显示关闭消息
我有一个简单的 websocket 应用程序,已部署在 tomcat 7.0.52 上。我正在使用 JSR 356 API javax.websocket-api-1.0-b08.jar。
我的 Java 服务器端代码是
每当我尝试连接到 websocket 时,它都会向我抛出它关闭的错误。
在客户端(javascript):代码如下
我无法理解为什么它显示连接已关闭消息。
java - Java WebSockets:远程端点处于状态 [TEXT_FULL_WRITING]
我正在尝试实现一些基于 websockets 的应用程序,它将与 JS 客户端进行非常密集的通信。
发送消息的代码非常原始:
对于罕见的发送,它工作得很好,但是当少数线程试图通过同一个会话(套接字)发送一些消息时,会引发下一个异常(请注意,这不是多线程问题,因为代码块是由会话同步的):
谷歌目前并没有丰富的此类异常,在这个问题上打了几个小时后,仍然没有解决方案。
Java 7.0.21,在 Tomcat 7.0.52 和 Tomcat 8.0.3 上测试。
任何答案都非常感谢!提前致谢。
2014 年 3 月 11 日更新:我使用 Jetty 9.1 测试了我的应用程序,但没有发生此异常。我假设这是 Tomcat 实现错误。
java - 将 JSR-356 WebSocket @ServerEndpoint 与 Spring 3 bean 集成
我正在使用没有全新 JSR-356 WebSockets 支持的 Spring 3.2.5。
我想在我的@ServerEndpoint
WebSocket 服务器中有单例 bean 引用,它由 servlet 容器本身实例化,而不是在 Spring 上下文中。
什么是干净的方法?
我当前的解决方案:我@Service
在静态字段中使用实例制作了单例 bean:
并且只是@ServerEndpoint
通过静态方法获取它,如果返回 null 则断开用户连接(如果在服务器启动期间未创建 bean 但用户连接):
java - 如何将参数/属性传递给 JSR-356 WebSocket 客户端(@ClientEndpoint)?
我想为容器实例化的 WebSocket 客户端端点添加一些额外的属性以进行分组/统计。我使用 JSR-356 创建了一个客户端 WebSocket 端点:
Session session = container.connectToServer( MyClientEndpoint.class , uri );
我想将一些对象传递给Session
或MyClientEndpoint
实例:
因为MyClientEndpoint
实例是由容器实例化的(在我的示例中 - Jetty),所以我不能只在构造函数中传递参数。我也不能在Session
用户属性中设置我的参数:
Session session = container.connectToServer( ClientSocket.class , uri );
session.getUserProperties().put( "group", this);
因为我在@OnOpen
处理程序中没有我的属性,而且我不能保证我的"group"
属性会在任何@OnMessage
call之前设置。
如何以允许我在由容器实例化的@ClientEndpoint 对象中使用其他对象的方式连接到 JSR-356 WebSocket?
java - JSR-356 WebSockets with Tomcat - 如何限制单个 IP 地址内的连接?
我制作了一个 JSR-356 @ServerEndpoint
,我想在其中限制来自单个 IP 地址的活动连接,以防止简单的 DDOS 攻击。
请注意,我正在搜索 Java 解决方案(JSR-356、Tomcat 或 Servlet 3.0 规范)。
HandshakeRequest
我已经尝试过自定义端点配置器,但即使在对象中我也无法访问 IP 地址。
如何在没有外部软件(如 iptables)的情况下限制来自单个 IP 地址的 JSR-356 连接数?
java - 使用 modifyHandshake 在 WebSocket 握手上添加标头
我正在尝试在握手期间发送自定义标头。我可以使用 ServerEndpointConfig.Configurator 拦截握手并覆盖 modifyHandshake。
该方法被调用并且 id 被添加到响应头中,尽管它不发送额外的头。
我用wireshark嗅了嗅它,以确保它不是客户端框架:
我想将生成的 id 发送给客户端,并且不想在额外的调用中执行此操作。是否有没有发送它的原因或有不同的方法?
我在开发博客上找到了一个示例,它还添加了一个标题,modifyHandshake
所以我想理论上应该是可能的。
java - 在 Tomcat JSR 356 websocket 中刷新页面时发生异常
我有 ServerEndpoint 类:
当我刷新页面时,调用了 onError 并且异常 t 包含下一个描述: java.util.concurrent.ExecutionException: java.net.SocketException: Broken pipe
可能是什么原因?
java - Websocket - ServerEndpoint 和 ClientEndpoint 不交换消息
我目前正在使用 Glassfish 4 和“板载”实现测试 Websockets,但无法发送或接收任何消息,尽管遵循Java EE 7 教程 - 发送和接收消息或如何使用 JSR 356 API 构建 Java WebSocket 应用程序等教程。我想实现一个简单的客户端服务器通信,所以我只有一个
服务器:
和一个客户:
Websocket 可用,我可以连接到服务器(更改 URI 会导致 404 握手错误),但不会调用任何(服务器端)方法,我得到的唯一日志消息是:
在客户端。我希望服务器至少记录 onOpen 调用。使用带有 Netbeans 8 的(未改动的)Glassfish 4 进行此测试。
有什么建议为什么没有交换消息?
java - Java/Tomcat:如何处理 WebSocket 设置完成
我有以下场景:具有相同应用程序的几个 Tomcat 实例需要在启动时相互连接。对于服务器之间的连接,使用 WebSockets (JSR-356)。Tomcat 启动后,我需要启动与另一台服务器的建立。
我怎样才能最正确地处理,内部 WebSockets 机制已经启动并且我可以开始使用 WebSockets?
应用程序基于 Spring 4。
我在 spring 启动时尝试了这个Execute 方法,这个How to add a hook to the application context 初始化事件?和spring 启动事件之后的这个Tomcat 。
所有这些方法都很酷,但似乎在那一刻 WebSockets 还没有准备好使用。抛出下一个异常:
现在,作为一种解决方法,我在建立连接之前在 WebServlet 的 init() 方法中使用了 3 秒的延迟,但我想避免这种黑客行为。
有任何想法吗?谢谢!