如何在不从Flex客户端接收消息的情况下从BlazeDS推送数据?

如何在不从Flex客户端接收消息的情况下从BlazeDS推送数据?,第1张

如何在不从Flex客户端接收消息的情况下从BlazeDS推送数据?

这是我编写并有时使用的测试代码,用于测试向客户端发送数据。这是ServiceAdapter实现的精简,简单的Java示例。它从Web上的现有示例中删除了许多不必要的代码。它可以编译,运行,我经常在测试中使用它。

package your.package.structure.adapter;import your.package.structure.device.DevicePort;import flex.messaging.messages.AsyncMessage;import flex.messaging.messages.Message;import flex.messaging.services.MessageService;import flex.messaging.services.ServiceAdapter;import flex.messaging.util.UUIDUtils;    public class TestServiceAdapter extends ServiceAdapter {    private volatile boolean running;    private Message createTestMessage() {        DevicePort objectToSend = new DevicePort("RouterDevice");        final AsyncMessage msg = new AsyncMessage();        msg.setDestination(getClass().getSimpleName() + "Destination");        msg.setClientId(UUIDUtils.createUUID());        msg.setMessageId(UUIDUtils.createUUID());        msg.setBody(objectToSend);        return msg;    }    private void sendMessageToClients(Message msg) {        ((MessageService) getDestination().getService()).pushMessageToClients(msg, false);    }        @Override    public void start(){ super.start();        Thread messageSender = new Thread(){ public void run(){     running = true;     while(running){         sendMessageToClients(createTestMessage());         secondsToSleep(3);     } }        };        messageSender.start(); }        @Override    public void stop(){        super.stop();        running = false;    }        @Override    public Object invoke(Message message) {        if (message.getBody().equals("stop")) { running = false;        }        return null;    }    private void secondsToSleep(int seconds) {        try{ Thread.sleep(seconds * 1000);        }catch(InterruptedException e){ System.out.println("TestServiceAdapter Interrupted while sending messages"); e.printStackTrace();        }    }        }

您需要在tomcat中设置一些属性才能使其正常工作。

在中

messaging-config.xml
,您需要添加适配器和目标:

将此行添加到现有

<adapters>
标签:

 <adapter-definition id="TestServiceAdapter" />

将此目标添加到同一

messaging-config.xml
文件:

<destination id="TestServiceAdapterDestination">        <channels> <channel ref="my-streaming-amf"/>        </channels>        <adapter ref="TestServiceAdapter"/>    </destination>

最后,确保在中定义了“ my-streaming-amf”通道

services-config.xml
,如下所示:

<channel-definition id="my-streaming-amf" >        <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" />        <properties>  <!-- you don't need to set all these properties, this is just what we set, included for illustration, only --> <idle-timeout-minutes>0</idle-timeout-minutes> <max-streaming-clients>10</max-streaming-clients>     <server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis> <user-agent-settings>     <user-agent match-on="Safari" kickstart-bytes="2048" max-streaming-connections-per-session="10"/>       <user-agent match-on="MSIE" kickstart-bytes="2048" max-streaming-connections-per-session="15"/>      <user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="10"/> </user-agent-settings>        </properties>    </channel-definition>

请注意,在blazeDS中,这两个配置文件(messaging-config.xml和services-config.xml)位于以下目录中:

/blazeds/tomcat/webapps/[nameOfYourApp]/WEB-INF/flex/

[nameOfYourApp]
您的Web应用程序所在的目录在哪里。

希望对您有所帮助!

-公斤



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5428844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存