我在下面定义了一个套接字服务器并创建了一个客户端。他们能够毫无问题地相互沟通。
现在,多个应用程序需要连接到此套接字服务器并将推送数据。订阅此服务器的不同客户端将从服务器读取数据。
如果我的应用程序连接到此服务器并开始编写数据,即使客户端没有连接它也是如此。
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()
答案 0 :(得分:0)
这是您要问的吗?
如果是,这就是您要的内容,则必须将服务器生成的数据缓冲到某个地方。该“某处”可以在文件或内存中。
作为一种优化,您只能在第一个客户端连接时才生成和缓冲数据,以避免在没有客户端连接时浪费用于生成数据的资源。
您将需要一些逻辑来决定何时删除(“清除”)缓冲的数据,以在没有更多客户端连接时释放存储容量。
如果您的应用程序可以生成多种类型的数据并且存储容量有限,那么您将需要一些逻辑来决定清除哪些数据,以便为要生成的新数据腾出空间。
现在我们越来越接近“缓存”的概念。