科技新闻

APNS消息推送实现

♀尐吖头ヾ 提交于 2020-03-10 11:36:03
转自:http://blog.csdn.net/biaobiaoqi/article/details/8058503 一、消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图 1-1: 1、 Provider :就是为指定 IOS设备应用程序提供 Push的服务器,(如果 IOS设备的应用程序是客户端的话,那么 Provider可以理解为服务端 [消息的发起者 ]); 2、 APNS : Apple Push Notification Service[苹果消息推送服务器 ]; 3、 iPhone :用来接收 APNS下发下来的消息; 4、 Client App : IOS设备上的应用程序,用来接收 iphone传递 APNS下发的消息到制定的一个客户端 app[消息的最终响应者 ]; 上图可以分为三个阶段: 阶段一: Provider[服务端 ]把要发送的消息,目的 IOS设备标识打包,发送给 APNS; 阶段二: APNS在自身的已注册 Push服务的 IOS设备列表中,查找有相应标识的 IOS设备,并将消息发送到 IOS设备; 阶段三: IOS设备把发送的消息传递给对应的应用程序,并且按照设定弹出 Push通知。 具体过程,如下图 1-2: 1、 [Client App]注册消息推送; 2、 [Client App]跟 [APNS Service]要

RabbitMQ的工作模式之一简单(Simple)模式

天大地大妈咪最大 提交于 2020-03-10 10:36:44
RabbitMQ的工作模式之一简单(Simple)模式 由一个生产者,一个消费者组成,消息通过FIFO模式排队。 导入依赖 <!--RabbitMQ的依赖--> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.7.3</version> </dependency> 首先创建工具类,用以生成连接,避免重复书写此段代码 public class RabbitMQUtil { private static ConnectionFactory factory = new ConnectionFactory(); static{ //用户名 factory.setUsername("hello"); //密码 factory.setPassword("123456"); //虚拟机 factory.setVirtualHost("/myhost"); //IP地址,运行rabbitmq组件的主机ip地址 factory.setHost("192.168.31.14"); //端口 factory.setPort(5672); } public static Connection getConnection(){ Connection connection

在MDK中使用 printf 函数

一笑奈何 提交于 2020-03-10 10:29:03
microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdin 、 stdout 和 stderr 。 这样,即可使用 printf() 来显示应用程序中的诊断消息。 要使用高级 I/O 函数,您必须提供自己实现的以下基本函数,以便与您自己的 I/O 设备配合使用。 fputc() 为所有输出函数实现此基本函数。 例如, fprintf() 、 printf() 、 fwrite() 、 fputs() 、 puts() 、 putc() 和 putchar() 。 fgetc() 为所有输入函数实现此基本函数。 例如, fscanf() 、 scanf() 、 fread() 、 read() 、 fgets() 、 gets() 、 getc() 和 getchar() 。 __backspace() 如果输入函数使用 scanf() 或 fscanf() ,则实现此基本函数。 Notemicrolib 中不支持的转换为 %lc 、 %ls 和 %a 。 下面是完整的资料: 在 keil (我用的是 realview mdk3.11 )建立 ARM 的工程时其中有一项是选 use MicroLIB 调整 microlib 输入 / 输出函数 microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdin 、 stdout 和

Android EventBus源码解析

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

ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天

不打扰是莪最后的温柔 提交于 2020-03-10 09:13:44
  看起来挺简单,细节还是很多的,好,接上一篇,我们已经成功连接singalR服务器了,那么剩下的内容呢,就是一步一步实现聊天功能。   我们先看看缺什么东西 点击好友弹框之后,要给服务器发消息,进入组Group.Group原理在上一篇已经介绍了,这里不再赘述。 点击发送消息到后台,后台在传送回来 将htmlappend到相应元素上,demo已经实现了,我们把代码拿过来用就可以了 模拟用户登录,点击发送聊天   在做上述工作之前,还是要做许多准备工作的。我们分析一下界面元素      好的,可以看到,一个消息里面有消息发送时间(addtime),用户名(username),用户头像(userphoto),用户消息体(msgcontent),除此之外还需要用户id,聊天id,以及组名(groupname).以此我先在后台建立模型。    namespace LayIM.Model { public enum CSMessageType { System = 1,//系统消息,出错,参数错误等消息 Custom = 2 //普通消息,对话,或者群组消息 } } namespace LayIM.Model { public class CSChatMessage { public CSChatMessage() { addtime = DateTime.Now.ToString("HH

2-Java NIO

谁都会走 提交于 2020-03-10 08:03:19
1、 Java NIO中主要组件是Selector、Channel、Buffer,看到Selector就知道Java NIO的IO模型多路复用。 2、 NIO的3个组件中用户编程最多的是Buffer,Buffer就是用户程序缓冲区的接口,背后他会与内核缓冲区进行数据交互,所以读、写操作就完全依赖Buffer的使用了。 3、创建Buffer时需要指定缓冲区的大小,这个大小最好比实际传输的消息大小略大一些。 4、Buffer有个flip()反转方法,用来反转Buffer的读、写状态,为什么需要这个方法?因为当你从Channel中读取数据时,对Buffer来说是写状态,Buffer被写完以后,需要从Buffer中读取到用户的业务程序中,这个时候对Buffer来说是读状态,需要调用flip()反转,所以由此看来,flip()方法一定不能少。 来源: CSDN 作者: 诗人不写诗 链接: https://blog.csdn.net/tales522/article/details/104750137

网络IPC:套接字

a 夏天 提交于 2020-03-10 05:30:01
摘要: UNIX系统进程间通信机制(IPC),例如管道,FIFO,消息队列,信号量和共享存储,可以允许一台计算机上的进程通信。 而套接字网络进程通信接口,不仅实现了一台计算机的通信,还能够进行网络进程间通信。 一、四层协议栈 数据链路层 网卡接口的网络驱动程序,处理数据在物理媒介上的传输;不同的物理网络具有不同的电气特性,网络驱动程序隐藏实现细节,为上层协议提供一致的接口 数据链路层常用协议:地址解析协议(ARP)和反向地址解析协议(RARP),实现IP地址与机器物理地址(通常为MAC地址)之间的相互转换 网络层 实现数据包的路由和转发 常用协议:IP、ICMP 网络层 IP协议:逐跳发送模式;根据数据包的目的地IP地址决定数据如何发送;如果数据包不能直接发送至目的地,IP协议负责寻找一个合适的下一跳路由器,并将数据包交付给该路由器转发 ICMP协议:因特网控制报文协议,用于检测网络连接 传输层 为两台主机的应用程序提供端到端通信 传输层 使用的主要协议:TCP、UDP 传输层 TCP:传输控制协议,为应用层提供可靠的、面向连接的、基于流的可靠服务;使用超时重发、数据确认等方式确保数据被正确发送至目的地 UDP:用户数据报协议,为应用层提供不可靠的、无连接的、基于数据报的服务;不保证数据能正确发送 应用层 应用程序逻辑实现 常用协议:ping、telnet、DNS、HTTP、FTP

wxpy学习

不问归期 提交于 2020-03-10 05:28:56
准备工作 安装 pip install -U wxpy -i "https://pypi.doubanio.com/simple/" 通过python脚本来发送消息给好友 from wxpy import * bot = Bot(console_qr=2) my_friend = bot.friends().search('张三', sex=MALE, city="武汉")[0] my_friend.send('Hello WeChat!') 然后,在linux下cli执行 python wxbot.py 终端会显示一个二维码,用手机客户端扫一扫,并确认登录就会将消息发送到好友张三。 疑问 1.程序运行完自动退出? 是的。可以在代码末尾加上embed()来阻塞线程,进入到python命令行。 2.每次登陆都要扫码? 可以通过设置cache_path=True来避免一段时间内重复扫码(会在模块文件所在目录生成wxpy.pkl文件)。 3.可以在linux下使用么? 当然可以。本文中的例子就是在centos6上进行的,不过注意设置console_qr=True。 附: window下代码 # -*- coding: utf-8 -*- from wxpy import * #创建一个聊天机器人 bot = Bot(cache_path=True) #设置cache

关于git提交的时候出现的一些问题

孤街浪徒 提交于 2020-03-10 04:03:11
前几天用git发现老有这个问题:error: pathspec ‘xxxx’’ did not match any file(s) known to git 后来找了半天才发现在Windows中,提交消息应使用双引号(git commit -m "xxxx"而不是git commit -m ‘xxxx’),单引号在Windows中不起作用。 咳咳~原来怎么简单 如果能帮到你麻烦给我点个赞再走哟~~ 来源: CSDN 作者: 我爱吃橙子~ 链接: https://blog.csdn.net/qq_31044379/article/details/104760121

14-Response

陌路散爱 提交于 2020-03-10 01:53:28
今日知识 1. response 2. ServletContext对象 response * 功能:设置响应消息 1. 设置响应行 1. 格式:HTTP/1.1 200 ok 2. 设置状态码:setStatus(int sc) 2. 设置响应头:setHeader(String name, String value) 3. 设置响应体: * 使用步骤 1. 获取输出流 * 字符输出流:getWriter() * 字节输出流:ServletOutputStream getOutStream() 2. 使用输出流,将数据输出到客户端浏览器 * 案例: 1. 完成重定向 1. 代码实现 * 方式一 //设置状态码为302 response.setStatus(302); //设置响应头location response.setHeader("location","/day15/responseDemo2"); * 方式二(简单方式) * response.sendRedirect("/day15/responseDemo2"); 2. 重定向的特点 1. 地址栏发生变化 2. 重定向可以访问别的站点资源 3. 重定向是两次请求,不能使用request对象来共享数据 3. 转发的特点 1. 转发地址栏路径不变 2. 转发只能访问当前服务器下的资源 3. 转发是一次请求