基于hiredis的聊天客户端
2016-05-04 10:44
519 查看
基于hiredis的聊天客户端实现
Redis里面提供了pub/sub功能,可以使用这个功能实现简单的聊天客户端。关于pub/sub功能,可以查看我的另一篇文章http://blog.csdn.net/qq_34788352/article/details/51312481
1.首先连接服务器
redisContext *conn = redisConnect("127.0.0.1",6380); //ip和port可以根据具体情况调整
2.连接上服务器,需要知道能够接入那个频道,因此需要获取当前所有的频道
redisReply *reply = (redisReply*)redisCommand(conn,"pubsub channels"); int number = reply->elements; //获得频道数量 int i=0; while(i<number) { redisReply r = reply->element[i][0]; printf("%s\n",r.str); i++; } freeReplyObject(reply);
redisReply结构体中保存着redisCommand执行后返回的结果。
redisReply结构体的定义如下:
typedef struct redisReply { int type; //REDIS_REPLY_* long long integer; //如果type==REDIS_REPLY_INTEGER,返回的数值保存在integer中 size_t len; //字符串的长度 char *str; //如果type==REDIS_REPLY_ERROR||type==REDIS_REPLY_STRING,返回的字符串保存在str中 size_t elements; //数组的大小 struct redisReply **element; //如果type==REDIS_REPLY_ARRAY,返回的数组保存在redisReply **element中 }redisReply;
3.选择频道,发送聊天内容
char * channel = malloc(sizeof(char)*256); scanf("%s",channel); char* words = (char*)malloc(sizeof(char)*(1024+256)); char* talk = (char*)malloc(sizeof(char)*1024); scanf("%s",talk); strcat(words,"publish "); strcat(words,channel); strcat(words," "); strcat(words,talk); reply = redisCommand(conn,words); feeReplyObject(reply);
4.退出聊天室
if(!strcmp(talk,"/")) //如果用户按下"/",则退出客户端 { char command[256] = "unsubscribe "; strcat(command,channel); reply = redisCommand(conn,command); freeReplyObject(reply); }
以上就是所有的核心代码。现在这个客户端功能还十分简单,以后有时间再进一步开发。
相关文章推荐
- redis安装问题小结
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- 用Redis实现微博关注关系
- Redis实现信息已读未读状态提示
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法
- 为啥懒 Redis 是更好的 Redis