【问题标题】:How to create multi-server sockets on one client in Python?如何在 Python 中的一个客户端上创建多服务器套接字?
【发布时间】:2013-07-06 13:34:49
【问题描述】:

如何在 Python 中的一个客户端上创建多服务器套接字? 我正在考虑创建一个服务器套接字列表并与 非阻塞套接字,但我没有找到一个好的教程,这就是我来这里的原因, 寻求更好的解决方案或非阻塞套接字指南。

谢谢!


感谢您的帮助,但我的意思是不同的,我有这样的服务器 Ip 列表:

SERVER_IP = ['127.0.0.1', '127.0.0.2', '127.0.0.3', '127.0.0.4', '127.0.0.5', '127.0.0.6, '127.0.0.7']

我有一个选项可以通过 ip 创建套接字列表,并尝试连接到每个 Ip 服务器,但我问 在这里,如果我有不同的方式来连接到所有这些服务器 Ip 而没有套接字列表,那就更方便了。

谢谢。

【问题讨论】:

    标签: python sockets connection multiserver


    【解决方案1】:

    如果您想将多个套接字连接到多个服务器,您应该查看select 模块 (http://docs.python.org/2/library/select.html)。

    基本上,它是这样工作的:

    import socket, select
    socks = {}
    # Connect to different servers here #
    sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socks[sock1.fileno()] = sock1
    poll = select.poll()
    for sock in socks:
        poll.register(sock)
    while 1:
        fd, event = poll.poll() # Optional timeout parameter in seconds
        sock = socks[fd]
        sock.recv(1024) # Do stuff
    

    注意,poll.poll() 方法返回对您无用的底层文件编号(您的操作系统用来表示文件的编号)。我只是按该数字将套接字存储在字典中,因此您可以从 poll 给出的文件编号中获取实际的套接字对象。我建议阅读上面的链接 select.poll 的文档。

    【讨论】:

      【解决方案2】:

      您可以使用select
      http://pymotw.com/2/select/ 加上 select 文档。
      或者一些第三方模块,例如twisted

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        相关资源
        最近更新 更多