加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex messaging service

发布时间:2020-12-15 04:05:55 所属栏目:百科 来源:网络整理
导读:由于要解决web800的web客户端性能问题,所以考虑使用flex 的 messaging service功能模块。? Flex messaging提供了一套标准的消息格式,包括客户端的api和服务器端的service程序。? 并且可以与其他的message service进行交互,比如JMS(java message service)
由于要解决web800的web客户端性能问题,所以考虑使用flex 的 messaging service功能模块。?

Flex messaging提供了一套标准的消息格式,包括客户端的api和服务器端的service程序。?
并且可以与其他的message service进行交互,比如JMS(java message service)。?
Flex messaging的发送方式采用生产者和消费者模式。?
Producer(生产者): 负责发送message?
Cosumer(消费者); 负责接收message?
一个客户端可同时包括这两个方式。?
Message channel(消息通道): Flex messaging通过消息通道来处理message的封装与拆分,在通道中进行编码和解码。每一个channel都是一个endpoint.?
Message adapter(消息适配器): 消息适配器,相当于一个消息的拦截器,可以将消息拦截下来进行组装,整合成其他服务器(JMS)的消息格式,并转发出去。用户也可以自己写拦截器,对消息进行拦截处理。?
Message service destination: Flex的消息都是被这个service来进行转发的,service就相当于一个中转站,对已经注册进来的consumer发送消息,支持广播消息发送,对于大批量需及时更新数据的应用很有效(如:股票、网站等)。Message service destination是messaging的核心。且可以针对不同的应用,增加多个destination。?
创建一个destination?
// 创建一个message destination?
String serviceId = "message-service"; //message service名称,配置文件中已经设置了?
MessageBroker broker = MessageBroker.getMessageBroker(null);?
MessageService service = (MessageService) broker.getService(serviceId);?
ServerSettings serverSettings = new ServerSettings();?
serverSettings.setMaxCacheSize(1000);?
serverSettings.setMessageTTL(0);?
serverSettings.setDurable(false);?
MessageDestination destination = service.createDestination(id); //创建一个destination?
destination.addChannel("my-rtmp"); //使用rtmp通道?
destination.setManaged(true);?
destination.setServerSettings(serverSettings);?
ServiceAdapter adapter = new ChatServerServiceAdapter(); //创建一个adapter,这里的adapter是继承自ServiceAdapter类?
adapter.setId(id+"_adapter"); //设定一个id,如果不设置会报错?
destination.setAdapter(adapter); //将adapter注册到destination中,监听事件?
if (MessageManager.getInstance().getService().isStarted())?
{?
try {?
destination.start(); //启动destination?
} catch(Exception e) {?
e.printStackTrace();?
}?
Adapter的使用?
public class ChatServerServiceAdapter extends ServiceAdapter {?
/**?
* 接收客户端发送过来的信息?
*/?
public Object invoke(Message arg0) {?
System.out.println(">>>接收客户端信息:"+arg0);?
return null;?
* 拦截subscribe信息(登陆,退出)?
public Object manage(CommandMessage arg0) {?
if(arg0.getOperation() == 0) { //?
System.out.println("用户:" + arg0.getClientId() + " 登陆!");?
if(arg0.getOperation() == 1) {?
System.out.println("用户:" + arg0.getClientId() + " 退出!");?
return new ArrayList(); //必须返回空的arraylist,否则用户退出不会调用函数?
* 告诉messageservice服务器,subscribe需要被该类拦截?
public boolean handlesSubscriptions() {?
return true; //注意:这里必须返回true,要不然manage函数不会被调用?
服务器发送消息给客户端:?
* 发送消息给客户端?
* @param service 客户端连接的服务?
* @param clientId 被接受客户端的ID?
* @param message 消息内容?
public void sendMessage(String service,String clientId,String message) {?
AsyncMessage msg = new AsyncMessage();?
msg.setBody(message);?
msg.setDestination(service);?
msg.setClientId(clientId);?
msg.setMessageId(UUIDUtils.createUUID(false));?
MessageDestination msgDest = (MessageDestination)service.getDestination(serviceName);?
MessageClient msgClient = msgDest.getSubscriptionManager().getSubscriber(clientId);
this.service.getMessageBroker().routeMessageToMessageClient(msg,msgClient); //发送消息给 id为clientid的客户端?
// this.service.pushMessageToClients(msg,false); //发送消息给所有连接上的客户端?
// this.service.pushMessageFromPeer(msg,true);?
// this.service.sendPushMessageFromPeer(msg,sans-serif; font-size:14px; line-height:25.1875px">}?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读