簡體   English   中英

python多套接字連接

[英]python multiple socket connection

我在下面定義了一個套接字服務器,並且還創建了一個客戶端。 他們能夠彼此交流而沒有問題。

現在,多個應用程序需要連接到此套接字服務器,並將推送數據。 訂閱此服務器的不同客戶端將從服務器讀取數據。

我如何將我的應用程序連接到該服務器並即使沒有客戶端連接也開始寫數據。

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. 您有一個服務器應用程序
  2. 服務器應用程序產生數據
  3. 您有一個客戶端應用程序
  4. 客戶端應用程序可以連接到服務器應用程序並檢索數據
  5. 即使多個客戶端連接到服務器並檢索相同的數據,您也希望服務器應用程序僅產生一次數據
  6. 您希望服務器能夠在與任何客戶端連接到服務器的時間無關的時間產生數據

如果是,這就是您要的內容,那么您必須將服務器生成的數據緩沖到某個地方。 該“某處”可以在文件或內存中。

作為一種優化,您只能在第一個客戶端連接時才生成和緩沖數據,以避免在沒有客戶端連接時浪費用於生成數據的資源。

您將需要一些邏輯來決定何時刪除(“清除”)緩沖的數據,以在沒有更多客戶端連接時釋放存儲容量。

如果您的應用程序可以生成多種類型的數據,並且存儲容量有限,那么您將需要一些邏輯來決定清除哪些數據,以便為要生成的新數據騰出空間。

現在我們越來越接近“緩存”的概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM