PacketSender 发送接收socket macOS App

更新

问题原因可能为macOS 10.12 beta系统问题,新更新为10.12 beta 6问题解决。

目前版本已更新为1.4.3,支持多窗口。

起因

最近工作发现有时候需要测试发送TCP包,而目前Mac上又没有找到功能很好的软件,所以就自己开发了一个简单而实用的工具。PacketSender
因后来实用ObjC重写了的原因,所以开源旧版本的Swift版本吧。GitLabGitHub

Kafka、RocketMQ调研

Kafka是Linkin开源的消息中间件

Kafka的设计目标是:

(1)以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
(2)高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
(3)支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
(4)同时支持离线数据处理和实时数据处理。
(5)Scale out:支持在线水平扩展。

RocketMQ是阿里开源的消息中间件

其最初也是基于Kafka发展而来。

C/C++中宏定义的用法

无论是在网络上还是项目中,define的用法非常广泛,define是由预处理程序自动完成的,被成为宏定义。

宏定义的作用范围仅限于当前文件(头文件除外,包含该头文件的源文件中都可使用),一般define分为有参数和无参数两种。

宏定义优点

个人搭建git服务器与webmail服务器

最近看到一句令人很有感觉的一句话,”The best is yet to come…”,而我本人也很相信这句话。

在这个一天天各种新技术出生的年代,大家都想什么技术都熟悉一点,不至于让人说out了,而本人又是处女座的,有那么点强迫症,非常喜欢使用自己的东西,所以索性就搭建了自己的git服务器。而Apple新出的OSX10.10 DP2又依然没有解决邮件客户端的问题,感觉又很不爽,正好看到过一个RainLoop的帖子,所以也把WebMail捅咕上了。

终于从wordpress转移到了octopress

从大学开始就折腾过wordpress,工作后也确实一直用着wordpress。步入社会发现大学里面的都算不上皮毛,不懂的东西实在太多了,如饥似渴的小小学习2年,终于换了份工作。

当日子一步步的步上正轨,我的学习热情也慢慢回升了。记得是半年前吧,突然听说了octopress这个博客,只看介绍(A blogging framework for hackers.)就给人一种高大上的感觉哈。当时就想折腾下,可惜因为工作也忙,也想换工作,一直拖到了现在。

新工作依然还是程序员,比较热爱这个职业吧。当做出一个作品时那种快感,没做过的人是体验不到的。平时上班因为刚入职,还不忙,正好下班就可以捅咕自己的东西了。可能因为处女座的原因,尤其喜欢把这些东西搞到自己的服务器上。没事看看vps,发现阿里云现在很便宜嘛,一个月才55,而且还可以申请试用5天,想到就办,申请个试用的,搭建环境测试,满意之后买vps。

基于类成员函数回调的线程池-连接池-任务队列

在现实生活中,经常会用到线程池与队列的应用,所以写了一套可复利用接口。

其中优先级队列的蓝本从stl中复制出来的,唯一修改的地方就是添加了一个写锁,当top时加锁,pop后才解锁,保证真正不重复取出或丢失数据。
因为使用模板来构造,所以目前只支持类成员函数的回调。
与线程池共同使用时,外部调用时,需要new一个任务类来添加到队列中,线程池主函数会调用完成后自动delete析构。

此基于成员函数回调的线程池需要同优先级队列共同使用,原理是初始化一个初始为5个线程的线程池,并将自己的控制线程添加到最高优先级启动。控制线程的目的是当任务队列比较多时增加线程来增加效率,当任务队列少时减速线程来节约资源(目前未实现)

连接池,需要同线程池与任务队列共同使用,同样为先初始化一定数量的连接,供多线程调度使用,其中包含一个控制线程,来控制连接池中的连接数量,当取出一个连接来用时,会给取出的连接加锁,所以使用完后需要调用返回函数,来归还使用完的连接。

连接池的作用就是不必每次都创建连接使用完成后断开连接,而使用模板来构造扩展性更强,所以需要自己额外来写创建连接,与断开连接函数。

需要注意连接池需要在线程之前析构。

任务队列文件代码:

MongoDB与OracleDB效率测试

最近因为任务需要,专门调研了一下MongoDB数据库的效率。与常规的OracleDB做了一下对比。

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
Mongodb的存储方式是文档式存储,并不是Key-Value形式。
Mongodb的主要的三种集群方式的搭建:Replica Set、 Sharding、 Master-Slaver。
其他大部分内容互联网上也有很多,我也就不再做介绍了。