gpt4 book ai didi

java - 我的 Websocket 需要很长时间才能连接

转载 作者:行者123 更新时间:2023-12-01 11:30:50 24 4
gpt4 key购买 nike

更新看来在构造函数中的 org.glassfish.tyrus.core.BaseContainer 中,这两行运行速度 super 慢:

this.managedExecutorService = lookupManagedExecutorService();
this.managedScheduledExecutorService = lookupManagedScheduledExecutorService();

这两种方法的注释中都提到了 Android,这是怎么回事?我是否使用了针对桌面的错误 Java 代码?

<小时/>

我使用的代码与以下代码完全相同:

Tyrus Websocket Documentation: 1.1.2 Client Endpoint

不知何故,连接需要大约 10 秒,特别是在我运行 Eclipse 调试器时的这一行:

ClientManager client = ClientManager.createClient();

会不会和这个有关? Potentially similar Stack Overflow Question

我真的迷失了,我觉得我是一个罕见的异常者,尝试在 Java 客户端中使用 websockets,而不是在 Javascript 浏览器中。

最佳答案

所以问题的原因是 InitialContext 的初始化由 Tyrus 提供,以便重新使用(预定的)执行器服务(如果可用)。通常,如果没有可用的(并且这被记录为调试消息,请参阅进一步内容),则此操作会快速失败,但在这种情况下,仅在尝试初始化 INITIAL_CONTEXT_FACTORY 后才会失败。那行不通。要覆盖此行为,请调用
System.setProperty(javax.naming.InitialContext.INITIAL_CONTEXT_FACTORY, "javax.naming.spi.InitialContextFactory")
在创建客户端之前。然后,初始的 InitialContext 将尝试创建接口(interface)的实例,但这很快就会失败。

通过详细日志记录可能可以更早地发现问题。 Tyrus 不会进行大量(调试)日志记录,但在本例中设置为 jul over logback可能已经显示出潜在问题的早期迹象。作为一般规则:始终确保遇到奇怪问题时可以查看跟踪/调试日志记录。

至于源代码中的Android注释:这只是注意到与“JDK8 Compact2配置文件”不兼容的平台,并通过不导入javax.naming.InitialContext解决了这个问题直接类(因为显然它不存在于compact2配置文件中),但使用反射代替(另见 TYRUS-242 )。

如果您要创建纯 Java Websocket 客户端,请考虑使用 JDK 7 client 。 JDK 7 客户端 bundle (org.glassfish.tyrus:tyrus-container-jdk-client:1.10) 比默认客户端 bundle (org.glassfish.tyrus.bundles:tyrus-standalone-client:1.10) 要小得多。

当我开始在 Java 客户端中使用 websockets 时,我也感觉自己是个异类(我选择 Jetty websocket client API 实现)。我也开始更多地使用嵌入的 Tomcat(例如 basic-jsp-embed )。结合这些技术,您将获得强大的(“全双工”)网络解决方案(更类似于点对点而不是客户端-服务器)。希望它能流行起来。
需要记住的一个警告是,某些防火墙会在 30 分钟后断开连接(看起来像 http 连接)(即使连接正在使用中)。因此,为了获得稳定的连接,请确保客户端定期发送 ping 消息以确保连接正常,并在 30 分钟内/每 30 分钟创建一个新连接。

关于java - 我的 Websocket 需要很长时间才能连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30406774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com