c-为什么phpredis发送数据后要两次调用poll呢?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c-为什么phpredis发送数据后要两次调用poll呢?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4050字,纯文字阅读大概需要6分钟。
内容图文
$host = '127.0.0.1';
$port = 8888;
$key = 'group:32149904:binding';
$redis = new Redis();
$redis->pconnect($host, $port);
$obj = $redis->get($key);
echo $obj, PHP_EOL;
php代码就是以上这样,然后我strace了一下,结果如下
1565 connect(3, {sa_family=AF_INET, sin_port=htons(6080), sin_addr=inet_addr("10.83.73.168")}, 16) = -1 EINPROGRESS (Operation now in progress)
1566 poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 2000) = 1 ([{fd=3, revents=POLLOUT}])
1567 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
1568 fcntl(3, F_SETFL, O_RDWR) = 0
1569 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
1570 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1571 sendto(3, "*2\r\n$3\r\nGET\r\n$22\r\ngroup:32149904"..., 42, MSG_DONTWAIT, NULL, 0) = 42
1572 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1573 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
1574 recvfrom(3, "$44\r\n{\"allyid\":\"60979\",\"appid\":\""..., 8192, MSG_DONTWAIT, NULL, NULL) = 51
1575 write(1, "{\"allyid\":\"60979\",\"appid\":\"ex_mm"..., 44) = 44
1576 write(1, "\n", 1) = 1
1577 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1578 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
1579 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1580 sendto(3, "*2\r\n$3\r\nGET\r\n$22\r\ngroup:32149904"..., 42, MSG_DONTWAIT, NULL, 0) = 42
1581 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1582 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
1583 recvfrom(3, "$44\r\n{\"allyid\":\"60979\",\"appid\":\""..., 8192, MSG_DONTWAIT, NULL, NULL) = 51
1584 write(1, "{\"allyid\":\"60979\",\"appid\":\"ex_mm"..., 44) = 44
1585 write(1, "\n", 1) = 1
在1572行,发送完get命令后,就调用了poll,timeout传递的是0,1573行再次调用poll,timeout变成了2000。
请问,为什么要调用两次poll呢?只调用一次可以吗?
回复内容:
$host = '127.0.0.1';
$port = 8888;
$key = 'group:32149904:binding';
$redis = new Redis();
$redis->pconnect($host, $port);
$obj = $redis->get($key);
echo $obj, PHP_EOL;
php代码就是以上这样,然后我strace了一下,结果如下
1565 connect(3, {sa_family=AF_INET, sin_port=htons(6080), sin_addr=inet_addr("10.83.73.168")}, 16) = -1 EINPROGRESS (Operation now in progress)
1566 poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 2000) = 1 ([{fd=3, revents=POLLOUT}])
1567 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
1568 fcntl(3, F_SETFL, O_RDWR) = 0
1569 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
1570 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1571 sendto(3, "*2\r\n$3\r\nGET\r\n$22\r\ngroup:32149904"..., 42, MSG_DONTWAIT, NULL, 0) = 42
1572 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1573 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
1574 recvfrom(3, "$44\r\n{\"allyid\":\"60979\",\"appid\":\""..., 8192, MSG_DONTWAIT, NULL, NULL) = 51
1575 write(1, "{\"allyid\":\"60979\",\"appid\":\"ex_mm"..., 44) = 44
1576 write(1, "\n", 1) = 1
1577 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1578 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
1579 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1580 sendto(3, "*2\r\n$3\r\nGET\r\n$22\r\ngroup:32149904"..., 42, MSG_DONTWAIT, NULL, 0) = 42
1581 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
1582 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 2000) = 1 ([{fd=3, revents=POLLIN}])
1583 recvfrom(3, "$44\r\n{\"allyid\":\"60979\",\"appid\":\""..., 8192, MSG_DONTWAIT, NULL, NULL) = 51
1584 write(1, "{\"allyid\":\"60979\",\"appid\":\"ex_mm"..., 44) = 44
1585 write(1, "\n", 1) = 1
在1572行,发送完get命令后,就调用了poll,timeout传递的是0,1573行再次调用poll,timeout变成了2000。
请问,为什么要调用两次poll呢?只调用一次可以吗?
内容总结
以上是互联网集市为您收集整理的c-为什么phpredis发送数据后要两次调用poll呢?全部内容,希望文章能够帮你解决c-为什么phpredis发送数据后要两次调用poll呢?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。