有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

更新 在组织中似乎是这样。玻璃鱼。泰勒斯。果心BaseContainer在构造函数中,这两行运行速度非常慢:

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

我真的迷路了,我觉得我是一个罕见的异类,试图将WebSocket与Java客户机结合使用,而不是使用Javascript浏览器


共 (1) 个答案

  1. # 1 楼答案

    因此,问题的原因是Tyrus初始化了一个InitialContext,以便在执行器服务可用的情况下重用(计划的)执行器服务。通常情况下,如果没有可用的INITIAL_CONTEXT_FACTORY,它会很快失败(这是作为调试消息记录的,请参阅下文),但在这种情况下,它只有在尝试初始化无法工作的INITIAL_CONTEXT_FACTORY后才失败。要覆盖此行为,请调用
    System.setProperty(javax.naming.InitialContext.INITIAL_CONTEXT_FACTORY, "javax.naming.spi.InitialContextFactory")
    在创建客户端之前。初始InitialContext将尝试创建接口的实例,但很快就会失败

    问题可能会在之前的详细日志记录中发现。Tyrus不做很多(调试)日志记录,但在本例中,带有jul over logback的设置可能会显示潜在问题的早期迹象。作为一般规则:当遇到奇怪的问题时,始终确保可以查看跟踪/调试日志记录

    至于源代码中的Android注释:这正是发现与“JDK8 compact2概要文件”不兼容的平台,并通过不直接导入javax.naming.InitialContext类(因为它显然不存在于compact2概要文件中)而使用反射来解决(另请参见TYRUS-242

    如果您正在创建纯java WebSoClient客户端,请考虑使用^ {A5}。JDK 7客户端捆绑包(org.glassfish.tyrus:tyrus container JDK client:1.10)比默认捆绑包(org.glassfish.tyrus.bundles:tyrus standalone client:1.10)小得多

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