一直没有系统的学过python,但是每次都是网上看一些现成资料。写一些小脚本。不知道自己入没入门。一直时断时续的看一些基础语法。现在想通过做一个东西让自己熟悉一些。所以有如下疑问:
1.怎么判断一个socket server中的操作是阻塞或者是非阻塞的。如何用简单明了的代码测试出来阻塞与非阻塞的明显区别。这样非常直观的让我理解这个机制
有这种示例代码么。我在网上找了很久也没有。我说的是使用原生python编写 不是利用第三方已经写好的异步或者non-blocking模块
2.我在做一个带健康检查的DNS服务,其实就是一个python socket 脚本。我对他的规划是 一个主体的DNS socket server 的脚本。然后 一些check的脚本。这些check的脚本去检测我checklist的一些服务。然后判断他是否能对外界服务。最后check脚本返回一组可用服务的IP。而我在DNS socket server
中 import 这些check模块。按照返回的ip列表 随机返回一个IP响应外部的解析请求。这样既做到了健康检查。而且可以很智能调度访问.又可以做到负载均衡.
但是。有一个bug 。我测试时候故意停掉后端一个服务。发现DNS还是返回了后端正常时的IP列表。后来到网上查了一下发现 import 模块里边定义的变量的值是一直不会改变的。除非重新import. 但是我脚本里不可能这么写。 现在需要实现这个值能跟随每次检查而变动。而且能体现在我主体的DNS SOCKET server里。这样就能动态的增删后端节点
第二个问题是。我这个服务如果check模块变多以后。会影响响应的速度。我如何实现一个高效率的checker,是使用线程,还是进程,还是异步。哪个比较好一点。我想要实现这些checker是非阻塞的我这个服务才快得起来。
最后贴上已经实现的代码吧 :(请勿在饭后阅读):
DNS-SERVER :
https://gist.github.com/1332783
check_ping:
https://gist.github.com/1332789
请大家给我些建议。
1.怎么判断一个socket server中的操作是阻塞或者是非阻塞的。如何用简单明了的代码测试出来阻塞与非阻塞的明显区别。这样非常直观的让我理解这个机制
有这种示例代码么。我在网上找了很久也没有。我说的是使用原生python编写 不是利用第三方已经写好的异步或者non-blocking模块
2.我在做一个带健康检查的DNS服务,其实就是一个python socket 脚本。我对他的规划是 一个主体的DNS socket server 的脚本。然后 一些check的脚本。这些check的脚本去检测我checklist的一些服务。然后判断他是否能对外界服务。最后check脚本返回一组可用服务的IP。而我在DNS socket server
中 import 这些check模块。按照返回的ip列表 随机返回一个IP响应外部的解析请求。这样既做到了健康检查。而且可以很智能调度访问.又可以做到负载均衡.
但是。有一个bug 。我测试时候故意停掉后端一个服务。发现DNS还是返回了后端正常时的IP列表。后来到网上查了一下发现 import 模块里边定义的变量的值是一直不会改变的。除非重新import. 但是我脚本里不可能这么写。 现在需要实现这个值能跟随每次检查而变动。而且能体现在我主体的DNS SOCKET server里。这样就能动态的增删后端节点
第二个问题是。我这个服务如果check模块变多以后。会影响响应的速度。我如何实现一个高效率的checker,是使用线程,还是进程,还是异步。哪个比较好一点。我想要实现这些checker是非阻塞的我这个服务才快得起来。
最后贴上已经实现的代码吧 :(请勿在饭后阅读):
DNS-SERVER :
https://gist.github.com/1332783
check_ping:
https://gist.github.com/1332789
请大家给我些建议。