python多个套接字连接

时间:2017-10-06 02:26:28

标签: python sockets

我在下面定义了一个套接字服务器并创建了一个客户端。他们能够毫无问题地相互沟通。

现在,多个应用程序需要连接到此套接字服务器并将推送数据。订阅此服务器的不同客户端将从服务器读取数据。

如果我的应用程序连接到此服务器并开始编写数据,即使客户端没有连接它也是如此。

import socket
import sys
import time

def socket_connection_1():
    # Create a TCP/IP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Bind the socket to the port
    server_address = ('localhost', 9999)
    print >>sys.stderr, 'starting up on %s port %s' % server_address
    sock.bind(server_address)

    # Listen for incoming connections
    sock.listen(1)

    while True:
        # Wait for a connection
        print >>sys.stderr, 'waiting for a connection \n'
        connection, client_address = sock.accept()
        try:
            print >>sys.stderr, 'connection from', client_address

            # Receive the data in small chunks and retransmit it
            while True:
                print 'its true'
                # data = connection.recv(16)
                data = "This is a test message from python socket \n"

                # print >>sys.stderr, 'received "%s"' % data
                if data:
                    print 'data being sent'
                    print >>sys.stderr, 'sending data back to the client'
                    connection.sendall(data)
                else:
                    print >>sys.stderr, 'no more data from', client_address
                    break
                time.sleep(60)

        finally:
            # Clean up the connection
            connection.close()

socket_connection_1()

1 个答案:

答案 0 :(得分:0)

这是您要问的吗?

  1. 您有一个服务器应用程序
  2. 服务器应用程序产生数据
  3. 您有一个客户端应用程序
  4. 客户端应用程序可以连接到服务器应用程序并检索数据
  5. 即使多个客户端连接到服务器并检索相同的数据,您也希望服务器应用程序仅产生一次数据
  6. 您希望服务器能够在与任何客户端连接到服务器的时间无关的时间产生数据

如果是,这就是您要的内容,则必须将服务器生成的数据缓冲到某个地方。该“某处”可以在文件或内存中。

作为一种优化,您只能在第一个客户端连接时才生成和缓冲数据,以避免在没有客户端连接时浪费用于生成数据的资源。

您将需要一些逻辑来决定何时删除(“清除”)缓冲的数据,以在没有更多客户端连接时释放存储容量。

如果您的应用程序可以生成多种类型的数据并且存储容量有限,那么您将需要一些逻辑来决定清除哪些数据,以便为要生成的新数据腾出空间。

现在我们越来越接近“缓存”的概念。