科技新闻

android实现通知栏消息

微笑、不失礼 提交于 2020-03-17 05:30:42
一、原理 消息推送有两种,一种是客户端定时直接到服务器搜索消息,如果发现有新的消息,就获取消息下来;另一种是服务器向客户端发送消息,也就是当有信息消息时,服务器端就会向客户端发送消息。 二、步骤(代码) 注: Notification //是具体状态栏对象,设置Icon、文字、声音等。 NotificationMangager //状态栏通知管理类、负责发消息、清理消息。 import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.IBinder; import android.provider.MediaStore.Audio; import android.util.Log; import android.widget.RemoteViews; /** * 消息推送 * * @author Msquirrel * */ public class

Ros机器人之(四)发布Publisher消息

拥有回忆 提交于 2020-03-17 04:13:59
Ros机器人之(四)发布Publisher消息 从基础学习,发布消息Publisher 首先创建功能包,命令+名称+功能包依赖 catkin_create_pkg learning-topic roscpp rospy std_msgs geometry_msgs turtlesim src文件夹下创建一个publisher.cpp touch publisher.cpp 内容如下: /* publisher topic */ # include <ros/ros.h> # include <geometry_msgs/Twist.h> int main ( int argc , char * * argv ) { //初始节点化 ros :: init ( argc , argv , "publisher" ) ; //创建节点句柄 ros :: NodeHandle n ; //创建发布者,发布的话题及队列长度用于缓存 ros :: Publisher turtle_vel_pub = n . advertise < geometry_msgs :: Twist > ( "/turtle1/cmd_vel" , 10 ) ; //循环频率 ros :: Rate loop_rate ( 10 ) ; int count = 0 ; //循环 while ( ros :: ok

Redis复习篇(二)

喜夏-厌秋 提交于 2020-03-17 03:41:14
文章目录 1. Redis 发布订阅 1.1 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 1.2 发布订阅常用命令 1.3 常用场景 2. Redis的事务 2.1 实例 2.2 Redis事务的命令 3. Redis 数据备份与恢复 1. Redis 发布订阅 1.1 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系: 当有消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅他的三个客户端 1.2 发布订阅常用命令 1 PSUBSCRIBE pattern [pattern …] 订阅一个或多个符合给定模式的频道。 2 PUBSUB subcommand [argument [argument …]] 查看订阅与发布系统状态。 3 PUBLISH channel message 将信息发送到指定的频道。 4 PUNSUBSCRIBE [pattern [pattern …]] 退订所有给定模式的频道。 5 SUBSCRIBE channel

python给邮箱发送消息

你说的曾经没有我的故事 提交于 2020-03-17 03:32:35
首先要用到两个模块 并且大同你的发送邮箱smtp 最开始测试没打通了好久 smtplib是提供邮箱smtp服务, email是提供你发送消息的格式之类服务 import smtplib from email.mime.text import MIMEText def em(message, send_email): ''' :param message: 发送的信息 :param send_email: 接收人 :return: ''' msg = MIMEText(message, 'plain', 'utf-8') from_addr = "jumpserver@mallcai.com" # 发送人 password = "1rgyUwb26ipoOk" # 发送人密码 smtp_server = "smtp.mxhichina.com" # 邮箱的smtp服务器 to_addr = send_email # 接收人 server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel(1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit() 来源: https://www

MFC实战-编辑框数据实时更新

╄→尐↘猪︶ㄣ 提交于 2020-03-17 03:16:36
在VC里,很多情况下需要更新控件,也就是调用UpdateData(FALSE); 但是如果是在循环中调用该函数,会导致没有时间来刷新界面,消息得不到相应,从外部看来,似乎整个循环只执行了一次UpdateData(FALSE);如下面的例子 for ( i = 0 ; i < m ; i ++ ) { m_yiducishu = i + 1 ; UpdateData ( FALSE ) ; } 这种写法会导致界面没有时间更新。 根据牛人的指点,在代码上添加一点东西,就可以了.如下: for ( i = 0 ; i < m ; i ++ ) { m_yiducishu = i + 1 ; UpdateData ( FALSE ) ; /////////////////////////// MSG msg ; while ( PeekMessage ( & msg , 0 , 0 , 0 , PM_REMOVE ) ) { TranslateMessage ( & msg ) ; DispatchMessage ( & msg ) ; } /////////////////////////////// } 自己推动消息循环 来源: CSDN 作者: weixin_44103969 链接: https://blog.csdn.net/weixin_44103969/article

Wireshark协议分析之DNS

☆樱花仙子☆ 提交于 2020-03-17 02:31:49
一:前言 域名系统(DNS)是最重要的互联网协议之一,因为它是总所周知的黏合剂,把域名转换为IP地址。当我们想要和一台网络设备通信却不知道它的IP地址,可以使用它的域名来进行访问。 DNS服务器存储了一个有着IP地址和DNS名字映射资源记录的数据库,并将其和客户端以及其他DNS服务器共享 由于DNS服务器的结构很复杂,因此我们只关注于通常类型的DNS流量 二:DNS数据包结构 事务ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数,这6个字段是DNS的报文首部,共12个字节 整个DNS格式主要分为3部分内容,级基础结构部分、问题部分、资源记录部分 基础结构中的标志字段又分为若干个字段,如下图 事务ID(Transaction ID):用来对应DNS查询和响应的过程 QR(Query / Response):指明数据包是DNS查询还是DNS响应 操作码(Opcode):用来定义消息中请求的类型 权威应答(Authoritative Answer,AA):如果数据包设定了这个值,说明该响应是由域名内权威域名服务器发出的 截断(Truncation,TC):指明这个响应由于太长,无法装入数据包被极端 期望递归(Recursion desired,RD):如果在请求中设定了这个值,说明DNS客户端在目标域名服务器下不含有所请求信息的情况下,要求进行递归 可用递归

kafka的offset理解

旧街凉风 提交于 2020-03-17 01:14:45
kafka的offset理解 kafka是顺序读写,具备很好的吞吐量。实现原理是 每次生产消息时,都是往对应partition的文件中追加写入,而消息的被读取状态是由consumer来维护的 所以每个partition中offset一般都是连续递增的(如果开启了压缩,因为对旧数据的merge会导致不连续) 被读取的消息并不会删除,所以每次都是追加写入顺序读写,具备很好的吞吐量。 这也是为什么说kafka的broker是无状态的,整个过程中伴随由zookeeper的协调参与,一般是不同broker存储了不同partition或副本数据,当存在多个副本时,从那个broker读取数据时由zookeeper决定的,一般会由一台kafka作为leader(被读取),如果该kafka不可用时,zookeeper切换到别的broker,因为broker在zookeeper上维护一个 /broker/ids/{id}的临时节点,如果kafka不可用,该节点也会被删除,kafka集群会根据该节点的信息,切换被读取的kafka 实现过程是 consumer在消费消息后,向broker中有个专门维护每个consumer的offset的topic生产一条消息,记录自己当前已读的消息的offset+1的值作为新的offset的消息。当然在旧版本的实现是在zookeeper上有个节点存放这个offset

源自开源、反哺开源,是中国开源软件的必由之路

为君一笑 提交于 2020-03-16 19:18:44
某厂面试归来,发现自己落伍了!>>>   北京时间12月22日消息,中国电科普华基础软件公司已向国际非盈利性组织 Linux 基金会(Linux Foundation,TLF)正式提出申请,普华公司将成为 Linux 基金会中第四个来自中国的会员企业。   Linux 基金会致力于在世界范围内推广、普及和规范 Linux,以及从技术和市场活动等方面促进在Linux 领域的合作。目前,Linux基金会在世界范围内已经拥有180余家会员企业,包括中国移动、华为和中兴通讯等三家中国 IT 企业。   “作为备受瞩目的国产操作系统供应商,普华公司一直认为,源于开源、反哺开源是所有基于开源软件的国内操作系统企业必须要遵守的义务,也是企业长期可持续发展的必由之路。”普华公司市场总监宋可为谈道,“事实上,加入 Linux 基金会对于国产操作系统企业极其重要,但目前大多数企业将自身定位于 Linux 发行商,企业体量较小,对底层核心技术普遍采用跟随策略。普华现有的客户多来自对安全敏感的党政军领域,大家普遍关注国产操作系统的安全和自主可控程度。普华此次加入Linux 基金会就是希望能够通过此举融入核心开源社区,参与相关技术的研发工作,逐步影响开源社区的技术发展路线和相关技术标准。我们希望可以真正做到,源于开源,反哺开源,影响开源和引导开源。这是开源软件企业发展的必由之路

小程序如何实现聊天功能?

天大地大妈咪最大 提交于 2020-03-16 19:14:44
某厂面试归来,发现自己落伍了!>>> 由于微信小程序自有功能的限制,用户消息无法及时提醒,但是当有用户在小程序后台留言时,由于没有消息提醒功能,客服需要刷新网页版后台,才能看见用户消息,这就导致沟通没有时效性。通过借助第三方工具可以实现小程序即时聊天功能。 为小程序接入企达小程序IM后,可以实现用户消息即时提醒,当有用户发送消息,会像QQ一样闪烁提醒,并弹窗提示客服人员进行接待,有效避免因接待不及时,而造成用户流失。除了消息提醒,即时聊天还要能做到消息快捷回复。企达强大的知识库支持对常见问题进行预设,告别传统的文档复制粘贴模式,一键完成消息发送,提高客服接待效率。同时消息内容除了小程序本身可以实现的文本和卡片,还支持图片、语音、图文、链接等多种内容形式,支持客服主动邀请会话,实时推送消息,大大提高小程序的沟通聊天能力。 来源: oschina 链接: https://my.oschina.net/u/4249918/blog/3196114

RabbitMQ解决分布式事务问题

亡梦爱人 提交于 2020-03-16 17:58:46
SpringBoot消息重试机制 消息重试机制幂等性 如何合适选择重试机制 情况1: 消费者获取到消息后,调用第三方接口,但接口暂时无法访问,是否需要重试? 需要重试 情况2: 消费者获取到消息后,抛出数据转换异常,是否需要重试? 不需要重试 总结:对于情况2,如果消费者代码抛出异常是需要发布新版本才能解决的问题,那么不需要重试,重试也无济于事。应该采用日志记录+定时任务job健康检查+人工进行补偿 消费者如果保证消息幂等性,不被重复消费 产生原因:网络延迟传输中,会造成进行MQ重试中,在重试过程中,可能会造成重复消费。 解决办法: 使用全局MessageID判断消费方使用同一个,解决幂等性。 基于全局消息id区分消息,解决幂等性 生产者: 请求头设置消息id(messageId) @Component public class FanoutProducer { @Autowired private AmqpTemplate amqpTemplate; public void send(String queueName) { String msg = "my_fanout_msg:" + System.currentTimeMillis(); Message message = MessageBuilder.withBody(msg.getBytes())