如何解决服务器发送速度快于客户端可以接收
我的服务器发送对象的速度比客户端接收的快得多。这就是客户端接收 10 秒前发送的对象的原因,因为客户端必须接收队列中的每个对象。所以我的问题是:我如何减慢服务器的速度或让我的客户端更快地接收?
编辑:我向服务器添加了 time.sleep(0.1) 但有没有更有效的方法?
这是我的网络课程:
import socket
import pickle
class Network:
def __init__(self):
self.client = socket.socket(socket.AF_INET,socket.soCK_STREAM)
self.server = "192.168.1.15"
self.port = 5555
self.addr = (self.server,self.port)
self.player = self.connect()
def get_player(self):
return self.player
def connect(self):
try:
self.client.connect(self.addr)
except:
pass
def send_object(self,data):
self.client.send(pickle.dumps(data))
def get_object(self):
return pickle.loads(self.client.recv(1024))
def send_msg(self,data):
self.client.send(bytes(data,"utf-8"))
def get_msg(self):
return self.client.recv(1024).decode("utf-8")
和我的服务器发送时:
p_count = conn.recv(1024).decode("utf-8")
if p_count:
games.append(Game(game_id,int(p_count),ip))
game_id += 1
while True:
conn.send(pickle.dumps(games[-1]))
和我的客户在接收时:
def update(self):
global bg_surface
try:
self.game = n.get_object()
self.player_in = self.game.players_ready
bg_surface = pygame.image.load('./bilder/background3.jpg').convert()
bg_surface = pygame.transform.scale(bg_surface,(screen_width,screen_height))
self.warte_text = Label(f"Warte auf Spieler {self.player_in}/{self.player_amount}",20,(screen_width // 2,screen_height // 2 * 0.25),(255,0))
self.warte_text.update(bg_surface)
except:
pass
解决方法
处理这个问题的有效方法是让您的服务器在套接字上调用 select() 或 poll() 以找出套接字在其传出数据缓冲区中何时有空间(并且可以选择阻塞直到出现是房间),并且仅在套接字表明它已准备好写入时才向套接字生成和 send()
数据。这样,无论客户端读取速度有多慢,您的服务器线程都不会因等待客户端读取数据而被阻塞。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。