# 循环遍历每个client对应socket接收消息放入到消息队列中
def receiver():
print "receiver线程启动"
while True:
for keyTemp in clients.keys():
sock = clients[keyTemp]
try:
data = sock.recv(BufferSize)
except Exception:
pass
if data is None:
continue
elif data =="":
continue
else:
print clients.keys()
print "接收到新消息"+keyTemp+":"+data
Message = {}
Message[keyTemp] = data
MessageQueue.append(Message)
print MessageQueue
print MessageQueue[0]
这个代码是用python写了,感觉原理差不多吧!
问题:当我有两个用户在线["123","456"]时这个循环会遍历用户名所映射的socket
通过sock.recv(BufferSize)这个语句接收消息
当用户名为456的发送消息如:“你好!世界”我的服务器是不能接收到这个消息
只有当用户名为123的用户发送完消息后服务器才能才能接受到用户456发送的消息
即:循环会一直被阻塞,知道接收到消息才能执行。
这个问题应该怎么解决
用多线程应该可以解决,不懂python,之前用C#做过,太久了忘了,大概就是有阻塞的地方开个新线程就可以了。
试了下,发现在子线程开启新线程会报错,好像不可以这样做。