我目前正在使用CometD服务器以及jQuery客户端实现。我想知道的是,在我的服务器中是否有任何有效的方法可以让客户端检索信息(即字符串)。我只需要检索一次字符串,之后我就不再需要再使用该服务了。
目前我正在做的是使用服务通道并在服务器中为它添加一个监听器。然后我让我的客户端向该频道发送随机消息。收到消息后,服务器将检索字符串并使用相同的通道将其广播回客户端。
然而,我发现它是一种非常迂回的方式,此外,客户端在收到字符串后不再需要收听频道。有没有更好的方法呢?
更新:我也将服务器用于其他实时频道,这就是我选择CometD作为其发布广播功能的原因。
答案 0 :(得分:0)
如果您只需要将字符串信息返回给请求它的客户端,并且您不需要将此信息广播给其他客户端,那么您不需要CometD:一个简单的Servlet就足够了(你甚至不需要REST)。
另一方面,如果你需要将字符串信息广播给多个客户端,那么CometD就是适合这项工作的工具,毕竟它不是那么复杂,而是它的作用。
客户端:
cometd.init("http://server/cometd");
cometd.subscribe("/info", function(m)
{
// Do something with the message, then disconnect
cometd.disconnect();
});
cometd.publish("/service/myservice", {});
服务器:
@Service
class MyService
{
@Inject
private BayeuxServer bayeux;
@Session
private LocalSession session;
@Listener("/service/myservice")
public void processMyService(ServerSession s, ServerMessage m)
{
String info = retrieveInfo();
// Broadcast
bayeux.getChannel("/info").publish(session, info, null);
}
}
您可以在此找到有关CometD annotated services的更多信息。