gpt4 book ai didi

java - GWT 的 gwt-comet 的基本使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:33 25 4
gpt4 key购买 nike

我正在试用 gwt-comet 扩展 here .我无法从服务器获取任何消息到客户端。

我有一个带有 RPC 服务实现的基本 GWT 应用程序。

客户端: MockGui.java

public class MockGui implements EntryPoint {
@SerialTypes({
Message.class
})

public static abstract class MyMessageSerializer extends CometSerializer {
}

public void onModuleLoad() {
...

goServer();
}

public void goServer() {
GreetingServiceAsync service = GWT.create(GreetingService.class);
service.greetServer(new Message(), new AsyncCallback<Void>() {

@Override
public void onSuccess(Void result) {
// TODO Auto-generated method stub

}

@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub

}
});

CometListener listener = new CometListener() {
public void onConnected(int heartbeat) {
}

public void onDisconnected() {
}

public void onHeartbeat() {
}

public void onRefresh() {
}

public void onError(Throwable exception, boolean connected) {
// warn the user of the connection error
}

public void onMessage(List<? extends Serializable> messages) {
for (Serializable message : messages) {
if (message.getClass().equals(Message.class)) {
Message myMessage = (Message) message;
Window.alert(myMessage .getMessage());

Log.info("This is a 'INFO' test message");
Log.warn("This is a 'WARN' test message");
}
}
}
};

String serverUrl = GWT.getModuleBaseURL() + "greet";

CometSerializer serializer = GWT.create(MyMessageSerializer.class);

CometClient client = new CometClient(serverUrl, serializer, listener);

client.start();
}

服务端:GreetingServiceImpl.java

public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {
List<Message> messages = new ArrayList<Message>();

public void greetServer(Message message) throws IllegalArgumentException {
HttpSession httpSession = getThreadLocalRequest().getSession();

CometSession cometSession = CometServlet.getCometSession(httpSession);

Message m = new Message();
m.setMessage("test from server");

cometSession.enqueue(m);
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<!-- Servlets -->
<servlet>
<servlet-name>greetServlet</servlet-name>
<servlet-class>test.mock.gui.server.GreetingServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>greetServlet</servlet-name>
<url-pattern>/mockgui/greet</url-pattern>
</servlet-mapping>

<!-- the comet servlet for streaming messages to the client -->
<servlet>
<servlet-name>myComet</servlet-name>
<servlet-class>net.zschech.gwt.comet.server.CometServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>myComet</servlet-name>
<url-pattern>/mockgui/comet</url-pattern>
</servlet-mapping>

<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>MockGui.html</welcome-file>
</welcome-file-list>

</web-app>

我希望客户端(监听器)的 cometd 监听器被触发 - 然而,似乎什么也没有发生。我不知道如何进一步调试问题 - 没有执行失败。

有什么方法可以让我看到 comet servlet (myComet) 何时被触发以及它在做什么?

最佳答案

这似乎是您用于 comet 请求的 URL:

String serverUrl = GWT.getModuleBaseURL() + "greet";

但是您在 web.xml 中的 comet URL 是/mockgui/comet。您至少可以尝试用这个替换上面的行吗?:

String serverUrl = GWT.getModuleBaseURL() + "comet";

如果还是不行,再做一个

Window.alert(serverUrl);

并查看 URL 是否实际指向 comet servlet。

祝你好运!

关于java - GWT 的 gwt-comet 的基本使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006162/

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