打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CometD Java 服务器服务

原文地址:

                http://cometd.org/documentation/cometd-java/server/services

 

CometD Java 服务器服务

 

 

sbordet 提交于星期二,2009/11/17-11:39

 

 

CometD Java 服务器 API 服务

 

 

CometD 服务是一个 Java 类,允许开发人员在Bayeux频道接收Bayeux消息时指定运行的代码。

 

 

CometD 服务实现

 

 

CometD 服务是一个 Java 类,它扩展 CometD org.cometd.server.BayeuxService类,指定感兴趣的Bayeux 频道的服务,并且,符合扩展 BayeuxService 类的需要如:

 

public class EchoService extendsBayeuxService                           (1)

{

   public EchoService(Bayeux bayeux)                                 (2)

    {

       super(bayeux, "echo");                                       (3)

       subscribe("/echo", "processEcho");                             (4)

    }

 

   public void processEcho(Client remote, Map<String, Object> data)        (5)

    {

       remote.deliver(getClient(), "/echo", data, null);                    (6)

    }

}

 

这是一种简单的 echo 服务,返回远程客户端频道"/ echo "发送的消息到远程客户端本身。

 

 

注意以下几点:

1)我们是从 org.cometd.server.BayeuxService 的扩展类

2)我们采用一个org.cometd.Bayeux 对象创建了一个构造函数

3)我们调用父类的构造函数,传递 Bayeux 对象和任意的服务名称,

上面的例子用的是:"echo"

4)我们订阅频道"/ echo ",并且指定在该通道的消息到达时,

必须调用的方法名称

5)我们需要定义一个与方法(4)中相同名称的方法,它有适当的参数(见下文)

6)我们使用 org.cometd.Client API 把消息返回该特定客户端

 

 

BayeuxService 类规定回调方法必须具有下列参数之一:

 

// Obtains the remote client object and themessage object

public void processEcho(Client remote,Message message)

 

// Obtains the remote client object and themessage's data object

// (additional message information, such asthe channel or the id is lost)

public void processEcho(Client remote,Map<String, Object> data)

 

// Obtains the remote client object, thechannel name, the message object and the message id

public void processEcho(Client remote,String channelName, Message message, String messageId)

 

// Obtains the remote client object, thechannel name, the message's data object and the message id

public void processEcho(Client remote,String channelName, Map<String, Object> data, String messageId)

 

请注意,在 subscribe() 方法中指定的频道名称可以是通配符,例如:

 

public class BaseballTeamService extendsBayeuxService

{

   public BaseballTeamService(Bayeux bayeux)

    {

       super(bayeux, "baseballTeam");

       subscribe("/baseball/team/*","processBaseballTeam");

    }

 

public voidprocessBaseballTeam(Client remote, String channelName, Map<String,Object> data, String messageId)

    {

        // Uponreceiving a message on channel /baseball/team/*, forward to channel/events/baseball/team/*

       getBayeux().getChannel("/events" + channelName, true).publish(getClient(),data, null);

    }

}

 

此外请注意,在第一个示例中我们如何用Client.deliver() 向特定远程客户端来发送消息,而在第二个我们用 Channel.publish() 给订阅频道"/events/baseball/team/*"的人发送一条消息。

 

 

一旦您在 web 应用程序中已经编写了 Bayeux 服务,就是时候用普通模式或sping模式来配置管理它们。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP 使用CURL库IP欺骗,隐藏真实客户端IP
C# Socket 网络编程
VB.NET环境下的Socket编程举例
c#(Socket)异步套接字代码示例
PHP 获取客户端真实IP地址多种方法小结
Remmina Remote Desktop Client 连不上了
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服