Redis服务器如何发送回复内容给客户端
来源:互联网 发布:linux device is busy 编辑:程序博客网 时间:2024/05/19 13:08
Redis采用了事件驱动框架,根据文件事件及时间事件来处理逻辑。
读事件的逻辑好理解:客户端连接上服务器后,服务器调用accepttcphandle创建一个client,同时使用该client注册一个将该fd的可读事件与readQuery处理器绑定起来。当客户端发布命令后通过网络传输到redis-server后,内核向用户空间抛出可读事件,readQuery被调用。
问题来了,readQuery执行后,可能会有需要返回给客户端的数据,这个数据如何返回呢?即server如何发送数据给客户端。根据redis的设计,我原本以为redis-server注册了一个可写事件,再绑定一个类似于writeHandler之类的处理器来写缓冲,看了源码,发现并不是这样。
redis-server针对每个已经连接上的client维护了一个输出缓冲,用于缓存需要回复给client的内容。每次执行一个命令,如果产生了需要回复给客户端的内容就调用AddReply*相关的接口写到client的buf当中,然后在后续调用handleClientsWithPendingWrites()集中处理所有客户端的回复。在这个接口里面实际执行了write来将buf当中的内容写到网卡里,发给客户端,中间调用的是writeToClient,这个函数持续写数据,直到数据写完。
阅读全文
1 0
- Redis服务器如何发送回复内容给客户端
- 客户端程序利用数据输出流out,将文本框中的内容发送给服务器
- Java客户端给服务器发送文件
- 客户端将手机号发送给服务器,服务器将包含该手机号文件名发送给客户端
- 客户端如何向https服务器发送数据
- 客户端如何向https服务器发送数据
- WEB客户端发送给WEB服务器的HTTP请求消息
- windows 服务器 服务端程序发送RST给客户端
- 详解MySQL Server端如何发送结果集给客户端
- 服务端接收到客户端发送的文件名,并把文件的内容返回给客户端
- Test_Java_网络编程(客户端向服务器发送字符串,服务器将字符串反转后发送给客户端)
- RTSP 测试,模拟客户端收到服务器发送过来的RTP流,自动回复了ICMP消息,谁知道这个消息是干啥的???能不能不回复ICMP消息呢
- linux下实现服务器与客户端(连接时给客户端发送时间)
- JavaMail 客户端发送邮件,如何修改服务器端口
- 服务器如何给多个客户端分配端口号
- 如何实现服务器给android客户端主动推送消息
- 如何将存在服务器上的word文件在客户端浏览的时候以html页的形式发送给用户?
- MQ JMS发送消息并接收客户端回复
- SVN : Working copy ' ......' locked
- 公众号服务号自定义菜单获取code
- es构成
- SpringMVC
- 集合中的面试题
- Redis服务器如何发送回复内容给客户端
- 小球随鼠标移动
- 欢迎使用CSDN-markdown编辑器
- Redis设实
- CRm做到staff时出现页面调用不到post和department的情况,报出空指针异常
- PCL滤波I
- Maven 如何打包可运行jar包
- 【loli的胡策】NOIP训练8.15(找规律+暴力)
- SVM支持矢量机