createClient上次执行了一半,这次一口气说完剩下的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c->fd = fd;
//记录句柄号
//自定义检查点: 1 2 3
c->name = NULL;
//自定义检查点: 1 2 3
c->bufpos = 0;
//自定义检查点: 1 2 3
c->querybuf = sdsempty();
//自定义检查点: 1 2 3
c->querybuf_peak = 0;
//自定义检查点: 1 2 3
c->reqtype = 0;
//自定义检查点: 1 2 3
c->argc = 0;
//自定义检查点: 1 2 3
c->argv = NULL;
//自定义检查点: 1 2 3
c->cmd = c->lastcmd = NULL;
//自定义检查点: 1 2 3
c->multibulklen = 0;
//自定义检查点: 1 2 3
c->bulklen = -1;
//自定义检查点: 1 2 3
c->sentlen = 0;
//自定义检查点: 1 2 3
c->flags = 0;
//自定义检查点: 1 2 3
c->ctime = c->lastinteraction = server.unixtime;
//自定义检查点: 1 2 3
c->authenticated = 0;
//自定义检查点: 1 2 3
c->replstate = REDIS_REPL_NONE;
//自定义检查点: 1 2 3
c->reploff = 0;
//自定义检查点: 1 2 3
c->repl_ack_off = 0;
//自定义检查点: 1 2 3
c->repl_ack_time = 0;
//自定义检查点: 1 2 3
c->slave_listening_port = 0;
//自定义检查点: 1 2 3
c->reply = listCreate();
//自定义检查点: 1 2 3
c->reply_bytes = 0;
//自定义检查点: 1 2 3
c->obuf_soft_limit_reached_time = 0;
//自定义检查点: 1 2 3
listSetFreeMethod(c->reply,decrRefCountVoid);
//自定义检查点: 1 2 3
listSetDupMethod(c->reply,dupClientReplyValue);
//自定义检查点: 1 2 3
c->bpop.keys = dictCreate(&setDictType,NULL);
//自定义检查点: 1 2 3
c->bpop.timeout = 0;
//自定义检查点: 1 2 3
c->bpop.target = NULL;
//自定义检查点: 1 2 3
c->io_keys = listCreate();
//自定义检查点: 1 2 3
c->watched_keys = listCreate();
//自定义检查点: 1 2 3
listSetFreeMethod(c->io_keys,decrRefCountVoid);
//自定义检查点: 1 2 3
c->pubsub_channels = dictCreate(&setDictType,NULL);
//自定义检查点: 1 2 3
c->pubsub_patterns = listCreate();
//自定义检查点: 1 2 3
listSetFreeMethod(c->pubsub_patterns,decrRefCountVoid);
//自定义检查点: 1 2 3
listSetMatchMethod(c->pubsub_patterns,listMatchObjects);
//自定义检查点: 1 2 3
这些都没什么好说的。
后面的代码是:
listAddNodeTail,我们来研究代码,发现是构造一个listnode类型节点
这个node.value为C
然后将这个node增加到server.clients中去
~~~~~~~~~~~~~~
最后看一个函数initClientMultiState很简单。
至此,createClient函数结束,回到acceptCommonHandler。
这个函数剩下的代码比较简单,就不说了。
这样,函数acceptCommonHandler就结束了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回到acceptTcpHandler函数,这个函数也执行完了。
于是就回到了aeProcessEvents
预知后事如何,且听下回分解!