zoukankan      html  css  js  c++  java
  • Openfire:通过Servlet群发消息

    在Openfire中自带有Broadcase插件,可以让我们群发消息给全部用户或者组。不过如果是我们通过Servlet来实现这一功能,那么是能够增加一定的灵活性的。具体做法直接看Demo代码:

    public class SafeServlet extends HttpServlet {
    
        private JID serverAddress;
        private MessageRouter router;
        private UserManager userManager;
    
        @Override
        public void init() throws ServletException {
            super.init();
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            super.doGet(request, response);
    
            // 获取服务器地址
            serverAddress = new JID(XMPPServer.getInstance().getServerInfo().getXMPPDomain());
            router = XMPPServer.getInstance().getMessageRouter();
            userManager = UserManager.getInstance();
    
            System.out.println("Require SafeServlet GET Method");
    
            // 创建消息类
            final Message message = new Message();
            message.setFrom(serverAddress);
            message.setSubject("Test subject");
            message.setBody("Test body");
            message.setType(Message.Type.chat);
    
            // 获取所有用户
            Collection<User> users = userManager.getUsers();
            String xmppdomain = "@" + JiveGlobals.getProperty("xmpp.domain");
            // 对所有用户进行遍历,发送消息
            for (User u : users)
            {
                // 创建需要发送消息的备份,只将发送对象进行修改
                final Message newMessage = message.createCopy();
                newMessage.setTo(u.getUsername() + xmppdomain);
                try {
                    TimerTask messageTask = new TimerTask() {
                        @Override
                        public void run() {
                            router.route(newMessage);
                        }
                    };
    
                    TaskEngine.getInstance().schedule(messageTask, 5000);
                } catch (Exception e) {
                    Log.error(e.getMessage(), e);
                }
            }
        }
    
        @Override
        public void destroy() {
            super.destroy();
            
            serverAddress = null;
            router = null;
            userManager = null;
        }
    }

     Servlet的配置可以参考此文:http://www.cnblogs.com/ilovewindy/p/3834003.html

  • 相关阅读:
    C++ int与string的相互转换(含源码实现)
    二维数组名和二级指针
    一道算法题-从1到n整数中1出现的次数
    一道算法题-求三个矩形的交集矩形。
    位域
    计划
    Bigtable:一个分布式的结构化数据存储系统
    The Google File System 中文版
    HIVE和HBASE区别
    区分 hdfs hbase hive hbase适用场景
  • 原文地址:https://www.cnblogs.com/ilovewindy/p/3834092.html
Copyright © 2011-2022 走看看