Ik ben bezig met een threaded servertje in python,
Nu heb ik van alles en nog wat al voor elkaar.
Ik kan threads maken, connecten, data sturen, en weer terug krijgen, en dit ook vanuit meerdere clients tegeleik doen.
Tevens lijkt het goed te gaan met de threads, de server blijft reageren, ook nadat de 5 aangemaakte threads allemaal eens gebruikt zijn.
Ik heb de volgende tutorial gebruikt, maar er zit nog een boel abracadbra in.
http://www.devshed.com/c/...ic-Threading-in-Python/1/
Ik vraag me bijvoorbeeld af hoe ik een thread stop, zodat deze opnieuw gebruikt kan worden,
(ik denk dat ik dit niet nodig heb, want het lijkt te werken, maar hoe signallen de threads dan naar de bse thread dat ze klaar zijn om een nieuwe client te verwerken?
Daarnaast is het behoorlijk irritant dat het script geen sockets meer los laat, dit zorgt er voor dat ik constant een nieuwe poort moet gebruiken.
Hoewel het op got niet de bedoeling is dat er een plak code gedumpt wordt welke dan door de gotters gedebugged wordt (de code werkt), zou ik toch wat nederlandse uitleg kunnen gebruiken over wat nu precies wat doet.
Nu heb ik van alles en nog wat al voor elkaar.
Ik kan threads maken, connecten, data sturen, en weer terug krijgen, en dit ook vanuit meerdere clients tegeleik doen.
Tevens lijkt het goed te gaan met de threads, de server blijft reageren, ook nadat de 5 aangemaakte threads allemaal eens gebruikt zijn.
Ik heb de volgende tutorial gebruikt, maar er zit nog een boel abracadbra in.
http://www.devshed.com/c/...ic-Threading-in-Python/1/
Ik vraag me bijvoorbeeld af hoe ik een thread stop, zodat deze opnieuw gebruikt kan worden,
(ik denk dat ik dit niet nodig heb, want het lijkt te werken, maar hoe signallen de threads dan naar de bse thread dat ze klaar zijn om een nieuwe client te verwerken?
Daarnaast is het behoorlijk irritant dat het script geen sockets meer los laat, dit zorgt er voor dat ik constant een nieuwe poort moet gebruiken.
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
| #!/usr/bin/python import sys,os,threading,socket,getopt,string import Queue portnumber=1080 threads=5 # the list of chunkservers and their addresses chunkservers={}; chunkservers[1]=('127.0.0.1',1082) chunkservers[2]=('127.0.0.1',1083) # where to find each file, fileid,chunkserverid files={}; files['index.html']=(1,1) files['test.html']=(2,1) files['test/test.html']=(3,1) files['server2/test.html']=(4,2) files['server2/testjes.html']=(4,2) try: opts, args = getopt.getopt(sys.argv[1:], "t:p:", ["port=", "threads="]) except getopt.GetoptError: # print help information and exit: print 'Sorry, no arguments given or understood' sys.exit(2) for o, a in opts: if o in ("-p", "--port="): portnumber = long(a,10) if o in ("-t", "--threads="): threads = int(a,10) print 'MasterServer, starting '+str(threads)+" threads on port "+str(portnumber) class ClientThread ( threading.Thread ): def run ( self ): run=True; while run==True: # Get a client out of the queue client = clientPool.get() if client != None: print 'Received connection:', client[1][0] data = client[0].recv(1000) if data: data=data.join( data.strip().split() ) if data=='stop': run=False return true; print 'received "',data,'" from ',client[1][0],' connected on port ',client[1][1]; try: fileinfo=files[data] #returndata='test' returndata="fileid:"+str(fileinfo[0])+"\n" returndata+="serverip:"+chunkservers[ fileinfo[1] ][0]+"\n" returndata+="serverport:"+str(chunkservers[ fileinfo[1] ][1])+"\n" print "fileid:"+str(fileinfo[0])+"\nserverip:"+chunkservers[ fileinfo[1] ][0]+"\nserverport:"+str(chunkservers[ fileinfo[1] ][1]) except: returndata="404 Invalid file\n"; print "could not send file ",data; client[0].send(returndata) client[0].close(); del client; clientPool = Queue.Queue ( 0 ) for x in xrange ( threads ): ClientThread().start() #create an INET, STREAMing socket serversocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM) #bind the socket to a public host, # and a well-known port try: serversocket.bind((socket.gethostname(), portnumber)) #become a server socket serversocket.listen(threads) while True: clientPool.put ( serversocket.accept() ) except: print 'cannot open socket' sys.exit(2) for x in xrange ( threads ): ClientThread().stop(); |
Hoewel het op got niet de bedoeling is dat er een plak code gedumpt wordt welke dan door de gotters gedebugged wordt (de code werkt), zou ik toch wat nederlandse uitleg kunnen gebruiken over wat nu precies wat doet.
openkat.nl al gezien?