gwt-syncproxy 无法连接到地址

Posted

技术标签:

【中文标题】gwt-syncproxy 无法连接到地址【英文标题】:gwt-syncproxy can't connect to the address 【发布时间】:2013-11-21 09:39:34 【问题描述】:

我正在 GWT 中在汽车租赁公司的 Eclipse 中编写一个 java 项目。 我需要在 2 个代理(服务器)之间交换信息,例如可供出租的汽车列表,并且有人建议我使用 gwt-syncproxy 。 来自网站的描述:

GWT SyncProxy 在 Java 客户端和 RemoteService servlet 之间提供同步 RPC。通过使用 SyncProxy,我们可以从纯 Java(无 JSNI)代码中调用 GWT RemoteService 方法。

我遵循了官方指南(也是网上唯一的) https://code.google.com/p/gwt-syncproxy/ 但它不起作用:浏览器中的一条消息说:

插件无法连接到位于 127.0.0.1:9997 的开发模式服务器按照底层故障排除说明进行操作

(我在java客户端代码中指定的地址)project.java

  //create new proxy instance for the service interface:
  private static GreetingService rpcService =
       SyncProxy.newProxyInstance(GreetingService.class,
         "http://127.0.0.1:9997", "greet");

  //invoke the RPC method:
   String result = rpcService.greetServer("SyncProxy");

这是 GreetingService.java

  @RemoteServiceRelativePath("greet")
      public interface GreetingService extends RemoteService 
        String greetServer(String name);
   

以及服务实现GreetingServiceImpl.java

  public class GreetingServiceImpl extends RemoteServiceServlet
  implements GreetingService 
    public String greetServer(String name) 
     return "Hello, " + name;
    
  

我做错了什么?有没有更好的方法可以在不同服务器之间的局域网中进行 RPC? (我在日志文件和 Eclipse 控制台中没有错误)

【问题讨论】:

9997 端口通常用于开发模式的代码服务器 - 为什么在这里使用它而不是 8888 http 端口? @ColinAlworth 不知道..现在我已将其修改为:"127.0.0.1:8888", "greet");但没有任何改变,仍然:插件无法连接到 127.0.0.1:9997 的开发模式服务器按照底层故障排除说明进行操作 抱歉,我根本不知道这个库,只是想尽可能让您了解最初的细节。 【参考方案1】:

免责声明:我是 Sync-Proxy android 库的开发人员。

您收到的错误实际上并非来自 gwt-syncproxy 库。它来自 GWT 开发系统,表明浏览器无法联系开发模式系统(由 Eclipse 托管)。需要验证的几件事:

    开发模式主机是否在 Eclipse 中运行(检查 Eclipse 中可用的开发模式视图)没有错误? 编译前端是否抛出任何错误(检查控制台视图) 尝试清除您的浏览器缓存(对该错误的简短谷歌搜索产生了一些随机事件,导致开发模式系统无法正确锁定) 尝试在不支持开发模式的情况下浏览到托管 url(IE 没有在浏览器中导航到 127.0.0.1:8888 或 eclipse 说它托管您的应用程序的任何地方)并验证您的页面是否正确加载。如果没有,我建议创建一个全新启动的 GWT 项目并验证它是否正常工作,以确保您的计算机上没有其他服务阻塞)

作为后续行动,我对您的设置感到有些困惑。您是在开发 GWT 前端客户端还是 Java 桌面客户端? Sync-proxy 的开发使得常规客户端(GWT 框架之外)可以与 GWT 设计的后端 RPC 一起工作。具体来说,基于服务器的 RemoteService servlet 需要利用 GWT RPC 系统,而不仅仅是常规的 RemoteService servlet。如果您正在开发 GWT 前端客户端,则不需要同步代理,因为常规 GWT 框架可以与 RPC 后端通信。现在,如果我了解您的多服务器通信的目的,那么问题就变成了您是尝试从您的 Web 前端(GWT 客户端)进行这种通信,还是从后端的 Java servlet 进行这种通信?

如果这是在前端完成的,恐怕我没有可用的说明供您使用,因为您必须克服跨站点脚本问题,而且 syncproxy 并非设计为在内部工作一个 GWT 前端客户端(我已经测试过了)。如果这是您的意图,那么首先,您需要使用异步方法调用 newProxyInstance:

private static GreetingServiceAsync rpcServiceAsync =
  SyncProxy.newProxyInstance(GreetingServiceAsync.class,
        "127.0.0.1:8888", "greet");

具体来说,您最终会调用此方法两次以到达目标,其中每个 URL 将代表不同的租赁代理服务器。现在,将其托管在您的开发机器上以使其正常工作有点超出此答案的范围,但您也需要考虑到这一点

如果您在后端执行此操作,syncproxy 可能(未经测试)能够满足您的需求,但您需要管理超时情况,因为您正在进行的调用不会是异步的。最重要的是,您必须再次在您的开发环境中设置不同的托管服务器来测试可能的场景。如果这是一个很大的需求,请为 gwt-syncproxy 项目提出问题请求,我也许可以测试该场景并在下线的某个地方提供说明。

【讨论】:

以上是关于gwt-syncproxy 无法连接到地址的主要内容,如果未能解决你的问题,请参考以下文章

vmware 无法连接到虚拟机怎么解决

SQL server 2005 无法连接到服务器?

vmware workstation无法连接到虚拟机 怎么解决

无法将 CentOS 虚拟机连接到 Internet(NAT 连接)

vivo手机连不上网显示“无法连接到服务器(1,-10087),请检查你的网络

打开就出现:错误提示为:“无法连接到 WMI 提供程序。您没有权限或者该服务器无法访问。请注意,你只能使