import socket,time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('',0))
port=s.getsockname()[1]
s.setblocking(0)
lines=[]
while True:
try:
data, addr = s.recvfrom(1024)
if addr not in clients:
clients.append(addr)
if not lines:
for client in clients:
s.sendto(lines, client)
except:
pass
s.close()
I have paint application, in which the server sends the co-ordinates to a set of clients. I use the above code for sending, launching on a separate thread. This sends data to each client sequentially. This will cause a delay to the clients at the end of the list. Launching a separate thread for each client has scalability issues. Is there is scalabe way to write the above code maybe using async.io?
1 Answer 1
You cannot use recvfrom with a TCP socket (SOCK_STREAM). You don't see the error, because of your wrong exception handling. Never ignore all exceptions! Don't write your own server, use the appropriate interface from asyncio.
-
\$\begingroup\$ It should be
recvinstead? Which interface are talking about, please tell. \$\endgroup\$Abhishek Bhatia– Abhishek Bhatia2016年03月17日 18:44:17 +00:00Commented Mar 17, 2016 at 18:44 -
\$\begingroup\$ What do you want? \$\endgroup\$Daniel– Daniel2016年03月17日 18:58:13 +00:00Commented Mar 17, 2016 at 18:58
-
\$\begingroup\$ I want it to send data to all clients asynchronously. \$\endgroup\$Abhishek Bhatia– Abhishek Bhatia2016年03月17日 19:08:30 +00:00Commented Mar 17, 2016 at 19:08
You must log in to answer this question.
Explore related questions
See similar questions with these tags.