网站开发的软件支持,公司让我做网站负责人,中小企业网站建设问题,垡头网站建设现在有个问题需要大家思考一下#xff0c;有个已经上线了的项目#xff0c;有好好几千甚至上万的客户在使用了。现在项目开发商想发布一个通知。在今天下午6点需要重新启动服务器#xff0c;想让在线的人在在预定的时间内都收到消息#xff0c;让大家做好相应的准备#x…现在有个问题需要大家思考一下有个已经上线了的项目有好好几千甚至上万的客户在使用了。现在项目开发商想发布一个通知。在今天下午6点需要重新启动服务器想让在线的人在在预定的时间内都收到消息让大家做好相应的准备大家会怎么做1、逐个打电话2、在前台弄一个定时器每隔一定的时间刷新一次3、后台消息主动往前台推送相信你已经做出选择了。。。呵呵 下面讲一个简单的例子首先新建一个web项目添加开发flex需要的jar包和blazeds相关文件然后把web项目转成flex项目(不明白怎么弄没事过几天会写一篇这样的文章)然后修改一下services-config.xml和messaging-config.xml文件添加如下代码services-config.xml1. 2. idmy-streaming-amf3. classmx.messaging.channels.StreamingAMFChannel4. 5. urlhttp://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf6. classflex.messaging.endpoints.StreamingAMFEndpoint7. /8. 9. 010. 1011. 500012. 13. 14. 15. match-onMSIE16. kickstart-bytes204817. max-streaming-connections-per-session118. /19. 20. kickstart-bytes204821. max-streaming-connections-per-session122. /23. 24. 25. 复制代码messaging-config.xml1. 2. idtick-data-feed3. 4. 5. true6. .7. 8. 9. 10. 11. refmy-polling-amf /12. 13. /14. 15. 复制代码OK完了之后我们新建一个servlet作为服务端1. package com.serverpush;2.3. import java.io.IOException;4. import5. javax.servlet.ServletException;6. import7. javax.servlet.http.HttpServlet;8. import9. javax.servlet.http.HttpServletRequest;10. import11. javax.servlet.http.HttpServletResponse;12.13. import14. com.model.Tick;15.16. import flex.messaging.MessageBroker;17. import18. flex.messaging.messages.AsyncMessage;19. import20. flex.messaging.util.UUIDUtils;21.22. /**23. * Servlet implementation class24. TickCacheServlet25. */26. public class TickCacheServlet extendsHttpServlet27. {28. private static final long serialVersionUID 1L;29. private static30. FeedThread thread;31.32. /**33. * see34. HttpServlet#HttpServlet()35. */36. public TickCacheServlet() {37. super();38. //39. TODO Auto-generated constructor stub40. }41.42. /**43. * see44. HttpServlet#doGet(HttpServletRequestrequest, HttpServletResponse45. *46. response)47. */48. protected void doGet(HttpServletRequest49. request,50. HttpServletResponse response) throwsServletException, IOException51. {52. //接收前台参数53. String cmd request.getParameter(cmd);54. if55. (cmd.equals(start)) {56. start();57. }58. if (cmd.equals(stop))59. {60. stop();61. }62. }63.64. public void start() {65. if (thread null)66. {67. thread new68. FeedThread();69. thread.start();70. }71. System.out.println(start!!);72. }73.74. public75. void stop() {76. thread.running false;77. thread null;78. }79.80. /**81. *82. see HttpServlet#doPost(HttpServletRequestrequest, HttpServletResponse83. *84. response)85. */86. protected void doPost(HttpServletRequest87. request,88. HttpServletResponse response) throwsServletException, IOException89. {90. doGet(request, response);91. }92. //线程类每隔多长时间发送一次93. public static class94. FeedThread extends Thread {95. public boolean running true;96. public void97. run() {98. MessageBroker msgBroker 99. MessageBroker.getMessageBroker(null);100. String clientID 101. UUIDUtils.createUUID();102. int i 0;103. while (running) {104. Tick tick new105. Tick();106. tick.setMessageCN(今天下午6点更新程序需重启服务器);107. tick.setSeqNo(String.valueOf(i));108. System.out.println(i);109.110. AsyncMessage111. msg new112. AsyncMessage();113. msg.setDestination(tick-data-feed);114. msg.setHeader(DSSubtopic,115. tick);116. msg.setClientId(clientID);117. msg.setMessageId(UUIDUtils.createUUID());118. msg.setTimestamp(System.currentTimeMillis());119. msg.setBody(tick);120. msgBroker.routeMessageToService(msg,121. null);122. i;123. try {124. Thread.sleep(2000);125. } catch (InterruptedException126. e) {127. }128. }129. }130. }131. }复制代码在新建一个model用来保存消息1. package com.model;2.3. public class Tick {4. private String5. seqNo;6. private String messageCN;7.8. public String getMessageCN()9. {10. return messageCN;11. }12.13. public void setMessageCN(String messageCN)14. {15. this.messageCN messageCN;16. }17.18. public String getSeqNo()19. {20. return seqNo;21. }22.23. public void setSeqNo(String seqNo)24. {25. this.seqNo seqNo;26. }27. }复制代码后台就搞定了。下面看前台新建一个mxml文件和一个VO文件mxml:1. ?xml version1.02. encodingutf-8?3. 4. xmlns:fxhttp://ns.adobe.com/mxml/20095. xmlns:slibrary://ns.adobe.com/flex/spark6. xmlns:mxlibrary://ns.adobe.com/flex/mx7. minWidth9558. minHeight6009. 10. 11. 12.13. 14. 15. import16. mx.controls.Alert;17. import mx.messaging.ChannelSet;18. import19. mx.messaging.Consumer;20. import21. mx.messaging.events.MessageEvent;22.23. protected function24. submsg():void25. {26. Alert.show(click start);27. var consumer:Consumer new28. Consumer();29. consumer.destination tick-data-feed;30. consumer.subtopic 31. tick;32. consumer.channelSet new33. ChannelSet([my-streaming-amf]);34. //添加message的监听当后台有消息发送时调用messageHandler35.36. consumer.addEventListener(MessageEvent.MESSAGE,messageHandler);37.38. consumer.subscribe();39. }40. private function41. messageHandler(event:MessageEvent):void42. {43. var tick:TickVO 44. event.message.body as TickVO;45. txtTick.text tick.messageCNtick.seqNo;46.47. }48.49.50. ]]51. 52.53. 54. 56. 57. 58. x3259. y4360. width36261. height30262. layoutabsolute63. titleWatch64. Tick65. 66. x7267. y4368. textLabel69. idtxtTick/70. 71. x13272. y7173. labelButton74. clicksubmsg()/75. 76. 复制代码VO就是对应后台的model1. package2. {3. //远程到后台的Tick也就是说他们俩现在是对应的关系了你在后台给model赋值了在前台flex中就可以通过VO4. //取得model中的值5. [RemoteClass(aliascom.model.Tick)]6.7. [Bindable]8. public class TickVO9. {10. private var11. _seqNo:String;12. private var _messageCN:String;13.14. public function15. TickVO()16. {17.18. }19. public function get seqNo():String20. {21. return22. _seqNo;23. }24.25. public function setseqNo(value:String):void26. {27. _seqNo28. value;29. }30.31. public function get messageCN():String32. {33. return34. _messageCN;35. }36.37. public function set38. messageCN(value:String):void39. {40. _messageCN 41. value;42. }43.44.45. }46. }复制代码ok下面开始测试运行mxml界面如下点击button启动监听。然后在浏览器中输入http://localhost:8080/serverPush/TickCacheServlet?cmdstart表示现在我要发消息了当你运行了这个之后看看你刚才的那个mxml是不是有变化啦稍后奉上flexblazedsspringjava后台消息推送(这个稍微麻烦点)有些配置不同了flexblazedsjavaspring后台消息推送有界面维护