event

学习Pushlet(二):看源码了解pushlet

雨燕双飞 提交于 2020-03-12 04:01:56
首先我们需要去了解一下pushlet的代码,从而进行我们自己的自定义需求,首先我们找到我们写的后台服务,有两个方法一个设置睡眠时间和生成事件,那么到底有什么用呢,哪里用到了呢。我们将从官网下载的源码也放入到项目中去,我们进入到HelloWorldPlushlet继承的EventPullSource类里面,原来它继承了Runnable,是个线程,那么查看run方法:发现这里用到了我们自定义的两个方法,通过设置的睡眠时间让线程睡眠,一个通过生成事件的方法生成事件并且发布出去,那么到这里我们大概明白了,原来pushlet后台是生成了一个线程,这个线程不断生成事件并且发布出去,然后睡眠,一直循环。这就是生产信息的那个线程。 /** * Main loop: sleep, generate event and publish. */ public void run() { Log.debug(getClass().getName() + ": starting..."); alive = true; while (alive) { try { Thread.sleep(getSleepTime()); // Stopped during sleep: end loop. if (!alive) { break; } // If passivated wait until we get //

学习Pushlet(一):下载及运行demo

点点圈 提交于 2020-03-12 04:00:45
  一、最近项目中要使用pushlet作为推送消息的技术框架,所以特地学习了一下。我们重点记录项目中的实际使用过程和解决问题的办法。首先需要了解的是,Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。表面上是服务器推,实现是还是客户端拉。这张原理图画的不错:   1.browser发送join命令到server,server产生唯一的ID给client端,用于标识这次会话的唯一性,Pushlet是用java.rmi.server.UID产生的唯一的标志会话的标志,此时server会把sessionID作为key,session对象作为value,存放到HashMap里面,然后通过response.getWriter().println()回调给browser   2.browser拿到sessionID,并发送listen命令,listen命令,有subject,提交给server,server首先验证Session HashMap里面有没有这个sessionID,验证通过后,回调给客户端listen_ack消息,同时开始把数据放入eventQueue中,并update给客户端

MySQL计划任务(事件调度器)(Event Scheduler)

筅森魡賤 提交于 2020-03-12 01:55:50
http://www.cnblogs.com/c840136/articles/2388512.html https://dev.mysql.com/doc/refman/5.7/en/events-configuration.html MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_scheduler'; 或 SELECT @@event_scheduler; 或 SHOW PROCESSLIST; 若显示: +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 则可执行 SET GLOBAL event_scheduler = 1; 或 SET GLOBAL event_scheduler = ON; 来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如: mysqld ... -

MySQL 定时任务event

大憨熊 提交于 2020-03-11 16:46:23
由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据,可以使用mysql的存储过程和事件来完成。 下面例子定时清除日志表log中指定天数前的数据 1、创建日志表log CREATE TABLE IF NOT EXISTS `log` ( `log_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录id', `user_id` int(11) DEFAULT NULL COMMENT '用户id', `op` varchar(128) NOT NULL COMMENT '操作类型', `model` varchar(32) DEFAULT NULL COMMENT '操作模块', `activity_time` int(10) NOT NULL DEFAULT '0' COMMENT '操作时间', `data` text COMMENT '数据', PRIMARY KEY (`log_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户日志表' AUTO_INCREMENT=1 ; 2、创建事件e_del_logs CREATE EVENT `e_del_logs` ON SCHEDULE EVERY 1 DAY STARTS '2013-07-30 17:33:43' ON

java基础篇---Servlet监听器

南楼画角 提交于 2020-03-10 11:35:27
在写此篇前,看了一下园友写的,感觉其基础知识归纳的十分全面,我在此就不累赘的写了,链接地址(http://www.cnblogs.com/sherryueda/p/4273169.html), 我就写一下关于监听器的具体应用: 功能是负责监听WEB的各种操作,当相关的事件触发之后将产生事件,并对此事件进行处理,在WEB中可以对application、session、request三种操作进行监听。 对application监听: 对application监听,实际上就是对ServletContext(Servlet上下文)监听,主要使用以下两个接口:ServletContextListener ,ServletContextAttributeListener package com.oumyye.监听器; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ServletContextListenerDemo implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { // 上下文初始化时触发 System

超详细步骤配置zabbix实现邮件告警

纵饮孤独 提交于 2020-03-10 11:13:02
这里实现的邮件告警方式是使用一个可以在互联网上正常收发邮件的邮箱账号(例如:***@163.com),通过在zabbix服务端中设置,实现当发生故障时可以发送告警邮件到指定邮箱 实现步骤: 1、 安装邮件发送工具mailx 能查到版本信息说明安装成功 2、 修改配置文件 在/etc/mail.rc文件最后添加以下内容并重启zabbix-server服务: Smtp-auth-passwordd的获取方式见下图: 3、 修改web端 三个脚本参数分别对应sendmail.sh脚本里面的需要的参数:收件人地址、主题、详细内容。 配置用户,以Admin为例,因为Admin用户是在Zabbix administrators这个用户群组里面,所以要保证这个群组对所有的主机群组都有管理权限: 配置动作将告警和发邮件的操作关联起来 修改一下告警内容: 默认标题: {TRIGGER.STATUS}: {TRIGGER.NAME} 消息内容: 故障:{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障! 告警主机:{HOSTNAME1},IP地址:{HOST.CONN} 告警时间:{EVENT.DATE}--{EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 告警项目:{TRIGGER

第7章 监听器Listener

霸气de小男生 提交于 2020-03-10 11:07:04
Listener概述 Listener的使用 使用Listener需要实现相应的Listener接口。 public class SessionListenerTest implements HttpSessionListener { public void sessionCreated(HttpSessionEvent se) { HttpSession session = se.getSession(); System.out.println(" 新创建了一个 session: " + session); } public void sessionDestroyed(HttpSessionEvent se) { HttpSession session = se.getSession(); System.out.println(" 销毁了一个 session: " + session); } } 以上代码实现了HttpSessionListener接口。创建Session时会是服务器调用SessionCreated()方法,销毁Session时服务器调用sessionDestroyed()方法。他们都以HttpSessionEvent对象为参数,可以从该参数中获取session。Listener需要在web.xml中配置才能生效。 配置如下: <listener>

Android EventBus源码解析

你离开我真会死。 提交于 2020-03-10 09:31:47
前言 上一篇文章自己对EventBus的用法进行了简单的叙述,然后自己又去研究了一下EventBus3.0源码也参考了网上的一些大佬的博客进行进一步的理解,写这一篇文章让自己对EventBus有个好的总结回顾,如有不正确的地方欢迎留言。 一、EventBus简介 在EventBus没出现之前,那时候的开发者一般是使用Android四大组件中的广播进行组件间的消息传递,那么我们为什么要使用事件总线机制来替代广播呢?主要是因为: 广播:耗时、容易被捕获(不安全)。 事件总线:更节省资源、更高效,能将信息传递给原生以外的各种对象。 关于事件其实是一个泛泛的统称,指的是一个概念上的东西(不一定非得用什么Event命),通过查阅官方文档,事件的命名格式并没有任何要求,你可以定义一个对象作为事件,也可以发送基本数据类型如int,String等作为一个事件。后续的源码也可以进步证明(方法的命名并没有任何要求,只是加上@Subscribe注解即可!同时事件的命名也没有任何要求)。 EventBus作为一个消息总线主要有三个组成部分: 事件(Event): 可以是任意类型的对象。通过事件的发布者将事件进行传递。 事件订阅者(Subscriber): 接收特定的事件。 事件发布者(Publisher): 用于通知 Subscriber 有事件发生。可以在任意线程任 意位置发送事件。

jquery实现对话框拖动

女生的网名这么多〃 提交于 2020-03-10 03:41:02
之前项目组长让我实现一个固定的对话框可以拖动的效果,根据网上查到的代码自己写了一个对话框拖动方法,今天给大家分享一下我的代码。 function moveDialog(moveHeadId, dialogId) { var dialog = $("#" + dialogId); var moveHead = $("#" + moveHeadId); moveHead.bind("mousedown",function (event) { var offset_x = dialog[0].offsetLeft; var offset_y = dialog[0].offsetTop; var mouse_x = event.pageX; var mouse_y = event.pageY; $(document).bind("mousemove", function (event) { var _x = event.pageX - mouse_x; var _y = event.pageY - mouse_y; var windowWidth = $(window).width(); var windowHeight = $(window).height(); var dialogWidth = $("#" + dialogId).width(); var dialogHeight =

Ajax :六个全局事件

眉间皱痕 提交于 2020-03-09 18:50:56
加载请求: .ajaxStart() 和 .ajaxstop() $(document).ajaxStart(function(){ $('.loading').show(); }).ajaxStop(function(){ $('.loading').hide(); }); 错误处理: .ajaxError() //1 $.ajax()使用属性提示错误 $('form input[type=button]').click(function(){ $.ajax({ type:"post", url:"test1.php", async:true, data:$('form').serialize(), success:function(response,status,xhr){ $('#box').html(response); }, // timeout:3000 // global:false error:function(xhr,errorText,errorType){ // alert(errorText + ':' +errorType); alert(xhr.status + ':' +xhr.statusText); } }); }); //2 $.post()使用连缀.error()方法提示错误,将被.fail()取代 $('form input[type