在Linux中部署FFmpeg开源视频压缩环境过程简单笔记

下面是在Linux中部署FFmpeg和相关类库全过程的简单记录,如下:

编译安装yasm

编译安装x264

编译安装lame

编译安装libogg

编译安装libvorbis

编译安装faac

编译安装ffmpeg

将libx264写进ldconfig

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

Mini Framework:一个非常简单的PHP MVC框架

以学习为主要目的,用了两天时间写出了这个PHP框架,目前这个版本只是实现了最基本的MVC需求,暂未丰富各种类库,所以起名叫“Mini Framework”。

源代码请移步至:https://github.com/jasonweicn/MiniFramework

采用单例模式编写PHP的PDO类

下面的代码是用此前一个名为MyPDO的类改写的,引入了单例模式来保证在全局调用中不会重复实例化这个类,降低系统资源的浪费。

代码如下:

 

调用方法:

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

Linux下管理Memcached的Service脚本

Memcached的编译安装过程请参考本站的《Linux下部署Memcached和PHP的Memcache扩展方法

如Memcached已在Linux中安装完毕,且被部署到/usr/local/memcached这个路径下,接下来我们来开始为其安装用于启动和停止的服务管理脚本。

首先,通过vi在/etc/rc.d/init.d路径下新建一个名为memcached的脚本文件,命令如下:

然后,向其中写入Shell脚本如下:

保存退出vi后,执行下面的命令来安装这个脚本

然后可以通过下面的命令来检查是否安装成功

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

开源消息队列MemcacheQ在Linux中编译安装教程

队列(Queue)是一种常用的数据结构。在队列这种数据结构中,最先插入的元素将会最先被取出;反之最后插入的元素将会最后被取出,因此队列又称为“先进先出”(FIFO:First In First Out)的线性表。

加入元素的一端叫“队尾”,取出元素的一端叫“队头”。利用消息队列可以很好地异步处理数据的传送和存储,当遇到频繁且密集地向后端数据库中插入数据时,就可采用消息队列来异步处理这些数据写入。

MemcacheQ是一款基于Memcache协议的开源消息队列服务软件,由于其遵循了Memcache协议,因此开发成本很低,不需要学习额外的知识便可轻松掌握。

我在最近的一个项目中也应用了MemcacheQ,下面我将分享一下MemcacheQ在Linux中的编译和安装过程。

首先,MemcacheQ依赖于BerkeleyDB和Libevent,如果服务器中曾经安装过Memcached,那么Libevent应该已经存在了,否则就需要先下载安装Libevent。

下载链接如下:

Libevent:https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
Berkeley DB:http://download.oracle.com/otn/berkeley-db/db-6.0.30.tar.gz
MemcacheQ:https://github.com/stvchu/memcacheq

安装Libevent

安装BerkeleyDB

BerkeleyDB简介:BerkeleyDB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤。

MemcacheQ依赖BerkleyDB用于队列数据的持久化存储,以免在MemcacheQ意外崩溃或中断时,队列数据不会丢失。

安装MemcacheQ

启动MemcacheQ

附:MemcacheQ参数

用PHP测试一下

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

Happy new year!

大家新年好!2015我们继续努力!

苹果APNS推送效率研究总结

年底这段时间一直在研究苹果的APNS(英文全称:Apple Push Notification Service)服务,进行了很多尝试,积累了一些经验。写出来总结一下,有不对的地方欢迎指正。

关于推送效率,苹果官方给出的建议是当建立一个Socket通道后,尽可能将需要推送消息和接受的devicetoken连续发送至APNS服务器端。

但是,这里需要注意如果消息队列中存在不正确的devicetoken时,苹果会在接受到这个devicetoken时,强制中断当前的Socket通道,这样会造成后面的消息无法正常发送给APNS服务器。

怎么办?

可能会有人建议每推送一条消息就断开Socket通道重新连接一次,来保证推送成功率。这样做成功率的确可以保证,但效率实在太低。

那怎么办?

很简单,我的做法是在一个消息队列中,每发送一条消息,就去read当前的Socket通道,苹果会在遇到错误的devicetoken后进行标记,我们可以read到这个数据,从而将错误的devicetoken从队列中剔除,并尝试重新建立一个Socket通道,然后从错误的devicetoken后面继续推送。

这样,我们就可以放心大胆的去连续推送一个消息队列,而不用担心由于错误的devicetoken造成推送半途中断。

还有什么办法可以提升推送效率?

最简单的办法就是多线程或多进程处理消息队列,我们团队的做法是多进程,通过HASH将一个消息队列平均分布到多个服务器端的进程上,从而进一步加快推送的速度。

采用多进程还有一个考虑,那就是担心若采用多线程万一遇到某些未知的异常,结果很可能是全军覆没,所有线程一起挂掉。而多进程的状态下,一个进程出现问题,其他的进程还可以继续工作,尽可能将影响降至最低。

速度还能再快吗?

没问题,速度还想进一步提升,就要从网络带宽和服务器方面下功夫了。用n台服务器组成一个消息推送阵列,通过某种策略来分担一定量级的推送任务,每台服务器中再通过前面提到的多进程方式运作,相信效率能够提升的非常明显。

关于feedback

APNS的feedback是一个非常贴心的服务,他会告诉你近期推送的消息,有哪些设备由于卸载了应用而无法在通知中显示消息。

那么,我们通过定期从feedback中获得这些devicetoken后,在数据库中进行标记,在下次的推送中,从消息队列中剔除这些devicetoken,这样减少了无用功,推送一次会完成的更快。

其他建议

本着不重复发明轮子的思想,推荐一下ApnsPHP这个开源项目,这里就不放链接了,github上搜吧:)

阳光部落原创,更多内容请访问http://www.sunbloger.com/

再次深入研究苹果消息推送服务(APNS) 完善PHP版服务器端公共类

前段时间开发的一套APNS推送平台效率很差,通过再次深入研究苹果的消息推送服务,总结了不少经验。同时也参考了网上一些技术blog的博文,重新完善了此前写过的一个PHP类,代码如下:

阳光部落原创,更多内容请访问http://www.sunbloger.com/

Linux Bash发现重大安全漏洞

北京时间9月25日消息,Linux用户今天又得到了一个“惊喜”!Red Hat安全团队在 Linux 中广泛使用的Bash shell中发现了一个隐晦而危险的安全漏洞。该漏洞被称为“Bash Bug”或“Shellshock”。

当用户正常访问,该漏洞允许攻击者的代码像在Shell中一样执行,这就为各种各样的攻击打开了方便之门。而且,更糟糕的是,该漏洞已经在Linux中存在很长时间了,所以修补某个Linux机器很容易,但是要全部修补,几乎不可能实现。

Red Hat和Fedora已经发布了针对该漏洞的修补程序。该漏洞也会影响OS X,不过苹果公司尚未发布正式的修补程序。

这个Bash漏洞可能比Heartbleed更危险。

— — Robert Graham (@ErrataRob) 2014 年 9 月 24 日

Red Hat的Robert David Graham比较了该漏洞和Heartbleed,发现前者分布更广泛,有可能对系统安全带来长期影响。Graham在一篇博客文章中写道:“有大量的软件以某种方式与Shell交互,我们没有办法列举出受该漏洞影响的所有软件。”据The Verge报道,Berkeley ICSI的研究员Nicholas Weaver也同意这个说法:“它很隐晦、很可怕,并且会伴随我们多年。”

网络安全公司Rapid7工程部经理Tod Beardsley警告称,Bash漏洞的严重级别为“10”,这意味着它对用户电脑的威胁最大。Bash漏洞的利用复杂度级别为“低”,意味着黑客可以相对轻松地利用它发动攻击。

另外,网络安全公司Trail of Bits的CEO Dan Guido表示,“Heartbleed”漏洞能够允许黑客监控用户电脑,但不会取得控制权。而利用Bash漏洞的方法也更简单——只需要剪切和粘贴一行代码即可。

据称,谷歌安全研究员Tavis Ormandy在Twitter上表示,Linux系统提供商推出的补丁似乎“并不完整”,这引发了几位安全专家的担忧。(责编/单明珠)

本文转载自Linux中国,原文出自The Verge,部分内容有删改。

在Linux中用Shell脚本完成SVN版本库的建立

每次建立一个新的SVN版本库总感觉很繁琐,所以写了段脚本来把这个过程自动化,详细代码如下:

阳光部落原创,更多内容请访问http://www.sunbloger.com/