2016-09-12 39 views
8

Verileri her zaman buraya gönderen TCP sunucusunun nasıl yapılacağını sordum: Julia TCP select ve harika çalışıyor. Şimdi yeni bir problemim var, bu yüzden yeni sohbet etmeye başladım.Julia TCP sunucusu ve bağlantısı

Ben resimdeki gibi bağlantı bu tür yaptı: Yani Gönderen sunucuya 1 bazen bir şeyler gönderir ve sunucu 1 it ve sunucu 2 ve Sunucu 2 hesaplar numaralara göndermek ne güncelleştirmeleri okur ve C ile iletişim enter image description here

programı.

notwaiting = true 
message = zeros(10,14) 
server = listen(5001) 
connection = connect(5003) 

while true 
    if notwaiting 
     notwaiting = false 
     # Runs accept async (does not block the main thread) 
     @async begin 
      sock = accept(server) 
      reply= read(sock, Float64, 11) 
      message[:,convert(Int64,reply[1])] = reply[2:11] 

      write(connection,reshape(message,140)) 
      global notwaiting = true 
     end 
    end 
    write(connection,reshape(message,140)) 

    if message[1,1] == -1.0 
     close(connection) 
     close(server) 
     break 
    end 
    sleep(0.01) # slow down the loop 
end 

Gönderen geçerli:: İşte

1 kod benim sunucusudur

Connection2= connect(5001) 
message = [2.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0] 
write(Connection2,message) 
close(Connection2) 

Ve sunucu 2 şu şekildedir:

her şey birbirine gerçekten
function Server2_connection() 
    println("Waiting for connection") 
    server2 = listen(5003) 

    conn_2 = accept(server2) 

    while isopen(conn_2) 
     try 
      message_server2 = round(read(conn_2,Float64,140),3) 

      ins_matrix = reshape(message_server2[1:140],10,14) 

     catch e 
      println("caught an error $e") 
      break 
     end 
    end 

    println("Connection closed") 
    close(conn) 
    close(server) 
end 

sorun olduğunu ağır. Yani göndericiden 2 mesaj gönderebiliyorum ve her şey gerçekten yavaş çalışıyor. Her şeyi 10-15'lerde çalıştırabilirim ve sonra donuyor. Tüm bağlantılar işe yarıyor ama gerçekten yavaş. Sorum şu: bir şeyleri kaçırmıyorum veya sunucuları gerçekten yavaşlatan bir şey mi var? Bu daha iyi yolu nasıl kodlayabilirim?

+0

Uzaktan çağrı/uzaktan değerlendirme için [Julia'nın paralel araçları] (http://docs.julialang.org/en/latest/manual/parallel-computing/) kullanmamanız için herhangi bir sebep var mı? –

+0

Yavaşlığı ve donmayı yeniden üretemedim (testi yaklaşık 5 dakika boyunca çalıştırıp 10 mesaj gönderiyor). Bir Windows sisteminde Julia 0.5 + rc3 çalıştıran tüm programlarla testi yaptım ve yavaşlama olmadı. Sunucu2'yi bir Mac'e (bir wi-fi ağı üzerinden bağlı) aktarma bile 1 ve 2 sunucuları çalıştı. Belki bir versiyonun veya ortamın problemi? (ör .: OS, donanım, ağ, ...) – Gomiero

+0

Ne demek istiyorsun? Daha spesifik olarak ne demek istediğini açıklayabilir misin @FelipeLema –

cevap

1

Artık yavaşlığımda sorun yok. Ben julia kullanıcıları google forum yardım ve onlardan (Tanmay K. Mohapatra) aynı amaçla daha iyi kod yazdı: https://gist.github.com/tanmaykm/c2ab61a52cc5afa0e54fe61905a48ef1 Aynı şekilde çalışır.

Her iki kodla ilgili bir sorun, bağlantıları düzgün şekilde kapatmamalarıdır. Sunucu 2 düşerse, sunucu 1 hata yazıyor ve sunucu 1 dinleme modunda kalıyor.

Diğer yollar işe yarıyor. Tanmay'a teşekkürler!

Düzeltme: yavaş buldu .... şeyleri yavaşlatması gereken şey, yaptı. Uyku komutu yavaşladı, ama beklediğimden daha yavaşladı. 0.001 saniyede bir uyku değişkenine sahip olsaydım, tüm sistemi 0.014 gibi yavaşlatırdı. Bu yüzden uyku komutunu kaldırdım ve iyi çalışıyor.

İlgili konular