分类 Library 中的文章

kafka安装

Install zookeeper cp conf/zoo-sample.cfg conf/zoo.cfg vi conf/zoo.cfg 主要修改配置文件中,数据目录的位置。 启动zookeeper服务 bin/zkServer.sh start kafka 2.12 修改配置文件: config/zookeeper.properties 修改数据目录: dataDir=/home/hadoop/zk #因为zookeeper变更为zk,所以需要在这里修改一下 启动zookeeper bin/zookeeper-server-start.sh config/zk.properties 启动kafka服务器(broker) 启动kafka服务器(broker)……

阅读全文

git 源码学习

Preface 最近趁上一个工作任务刚结束,新的任务还在规划中,难得清闲几天,可以抽点时间来看下 Linus 大神在2005年写的 git,为了简单,理解git 的原理,我们可以 checkout 刚开始的版本 比如hash为 79517a067。 这个版本总代码量只有1491 行。 Compile 依赖包:libssl-dev、zlib 修改编译选项:Makefile中LIBS 增加 -lcrypto 编译完之后会生成可执行文件: update-cache show-diff init-db write-tree read-tree commit-tree cat-file fsck-cache checkout-cache Analysis 1 init-db 初始化工作目录: 在当前路径下创建目录, .dircache └── objects ├── 00 ├── 01 ├── ...(255 dirs) ├── fe └── ff 2 update-cache……

阅读全文

Reflection in protobuf (C++/Java)

最近工作中,需要做一些消息动态解析,因为使用的 protobuf,考虑使用protobuf的反射特性。 1 reflection in C++ 在c++中使用protobuf 反射 1 2 3 4 5 6 7 8 9 10 11 package com.sunquan; message Login { optional int64 userid = 1; optional string username = 2; // name optional string password = 3; // passwd optional string email = 4; optional string nickname = 5; // etc ... } C++和Java 不同的是: c++有一个全局的pool,管理了所有定义在 proto 文件里的消息原型, 我们可以通过消息全称,查找到对应的单例的消息原型,然后通过原型构造可变的消息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** * 通过消息名称, 获取构造该类型的默认(原型)。 然后你可以……

阅读全文

Redis 入门

1 登陆 redis-cli 远程访问: $ redis-cli -h host -p port -a password 2 常用命令 redis 127.0.0.1:6379> COMMAND KEY_NAME (1) 查找key的类型 type key 查找 keys *oob* 列出所有包含oob的key hash 集合 HMSET sqkey name “redis tutorial” description “redis basic commands for caching” likes 20 visitors 23000……

阅读全文

libuv入门

libuv 定时器timer 使用: g++ -o sunquan main.cpp -luv 执行 ./sunquan 可以看到每隔1秒打印一次 count的值。 uv_timer_start(&timer, timer_cb, timeout, repeat); 其中timeout是首次触发等待的时间毫秒值,之后每隔repeat毫秒触发一次,如果repeat=0表示首次触发之后不再触发。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 //main.cpp #include <cstdlib> #include <uv.h> #include <assert.h> #include <time.h> #include <iostream> using namespace std; void timer_cb(uv_timer_t *handlei) { static int count=1; cout<<"count=="<<count++<<endl; } int main() { int r; uv_timer_t timer; r = uv_timer_init(uv_default_loop(),&timer); assert(r==0); // 0 cout<<uv_is_active((uv_handle_t*) &timer)<<endl; // 0 cout<< uv_is_closing((uv_handle_t*) &timer)<<endl; cout<<"start "<<time(NULL)<<endl; r = uv_timer_start(&timer, timer_cb, 5000, 1000); r = uv_run(uv_default_loop(),UV_RUN_DEFAULT); cout<<"r="<<r<<endl; return 0; }……

阅读全文

zeromq 入门

1 Install ubuntu 16.10上安装zeroMQ: (1) 下载zeromq wget https://github.com/zeromq/libzmq/releases/download/v4.2.1/zeromq-4.2.1.tar.gz (2) 解压 tar -zxvf zeromq-4.2.1.tar.gz (3) 编译安装 执行configure文件:./configure 编译: make 安装: make install 2 编写样例代码 server端代码:server.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> #include <unistd.h> #include <string.h> #include <assert.h> #include <zmq.h> int main (void) { // Socket to talk to clients void *context = zmq_ctx_new (); void *responder = zmq_socket (context, ZMQ_REP); int rc = zmq_bind (responder, "tcp://*:5555"); assert (rc == 0); while (1) { char buffer [10]; zmq_recv (responder, buffer, 10, 0); printf ("Received Hello\n"); sleep (1); // Do some 'work' zmq_send (responder, "World", 5, 0); } return 0; } client端代码:client.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <zmq.h> #include <string.h> #include <stdio.h> #include <unistd.h> int……

阅读全文

最近文章

分类

友情链接

标签

其它