Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145786
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-11 09:11
文章分类

全部博文(40)

文章存档

2020年(1)

2017年(36)

2014年(3)

我的朋友

分类: 服务器与存储

2017-03-19 11:08:47

首先通过看文档:
给客户端添加 server的函数主要是下面四个

说明如下:

简单翻译一下(直说前面 2个):
  • Memcached_ser_add() 函数添加一个 TCPserver memcached_st结构体,如果设置了 MEMCACHED_BEHAVIOR_USE_UDP将会返回一个MEMCACHED_INVALID_HOST_PROTOCOL错误。
  • Memcached_ser_add_udp() 函数添加一个 UDPserver memcached_st结构体,如果不设置 MEMCACHED_BEHAVIOR_USE_UDP将会返回一个MEMCACHED_INVALID_HOST_PROTOCOL错误。
然后我天真的相信了这个文档。
Memcached服务器监听口如下:

初始化代码如下:

结果如下:

原因是没有成功添加 SERVER。我果断去看了下源码:

memcached_server_add()函数的代码比较了一下发现 memcached_server_add_udp()什么都没做,如果memcached_st已经定义告诉我 memcached服务器拒绝,如果没有定义告诉我无效的参数,真是会开玩笑。下面的 memcached_server_add()的代码:

意外收获,如果memcached_server_add()的参数 hostname“绝对”路径名,则默认是使用 UNIX Domain Socket方式进行通信,这非常有用,好啦,回到正题。
我果断跟进去瞧一瞧,server_add() –> __instance_create_with() :


_server_init()函数只是一些赋值操作,看到这里是有些 疑问○1 后面再说;
我惊奇的发现,居然有 UDP的操作,看了一下memcached_is_udp()函数的代码:


不好意思,原来是一个宏,相信大家都很想知道怎样设置这个 flags.use_udp为真,直接改当然没有问题,但是我想到了 memcached_behavior_set()函数(其实之前看过memcached_behavior_set()的代码,所以看到这里时,我就明白了);

memcached_behavior_set() 就是设置 flags.use_udp为真;注意第三个参数就是要付给 flags.use_udp的值,所以一定要为1,否则 flags.use_udp仍为假。
虽说明白了,但是害的亲自测试一下才放心:
memcached服务器监听口:


客户端初始化代码:

结果如下:

疑问 01type是用来指定什么的?

_Server_init()函数中

Self struct Instance 类型,其中

原来
每个客户端
(struct memcached_st) 只能使用一种通信方式( TCP OR UDP);
每个
server struct Instance )只能使用一种连接方式( Socket OR UNIX Domain Socket);
Memcached
如果指定使用 UNIX Domain Socket通信方式则不能设置TCP UDP端口。
所以一共有三种通信方式: TCP/UDP/UNIX Domain Socket
阅读(1402) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~