2016-03-20 11 views
0

İşte sunucusudur:Bu "adım tabanlı" python sohbet sunucusunu ve istemciyi ikiden fazla örneği desteklemesi için nasıl geliştirebilirim?

import socket 


HOST = '127.0.0.1' 
PORT = 4444 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(5) 

conn, addr = s.accept() 
print addr, 'connected.' 

while True: 
    data = conn.recv(1024) 
    print '> ', data 
    reply = raw_input(">> ") 
    conn.sendall(reply) 
    if reply == 'bye': 
     break 

conn.close() 

Ve burada istemci: nasıl atayabilir: daha da önemlisi en verimli birden çok örneği desteklemek için bu kodu yükseltme yolu ve ne

import socket 

HOST = '127.0.0.1' 
PORT = 4444 


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 
while True: 
    message = raw_input("> ") 
    s.send(message) 
    reply = s.recv(1024) 
    print ">> ", repr(reply) 
    if message == 'bye': 
     break 

s.close() 

Tüm istemcilere isimleri (takma adlar) yazıp istemcilerin istedikleri zaman yazabilmelerini sağlayın. Threading kullanmayı denedim, ancak bu büyük bir felaket idi.

cevap

0

birden çok istemci bağlantısı için Çoklu istemci

, bazı lineer olmayan yürütme olması gerekir. Bunu başarmak için koroutinler veya iplikler kullanabilirsiniz.

Python 3 asyncio, coroutines (ve diğer özellikleri çok) için çoklu taklit kullanan kütüphane ile birlikte gelir. Buna bakmanı öneririm.

Ayrıca iş parçacığı da kullanabilirsiniz, bu karmaşık değil. Bir istemci sunucunuza bağlandığında, sadece işlevinizi yürütmek için yeni bir iş parçacığı oluşturmanız gerekir. Python official documentation bunu başarmanıza yardımcı olmalıdır. Her iş parçacığı kendi Kullanıcı örneği vardır, böylece

İstemci sunucudan bağlandığı zaman adı, siz, müşteri bilgileri ile yeni oluşturulan dizisindeki bir User nesnesi örneğini verebilir.