2016-09-12 5 views
8

मैंने पूछा कि टीसीपी सर्वर कैसे बनाना है जो हर समय डेटा भेजता है: Julia TCP select और यह बहुत अच्छा काम करता है। अब मुझे नई समस्या है, इसलिए मैंने नई बातचीत शुरू करने के लिए सोचा।जूलिया टीसीपी सर्वर और कनेक्शन

मैं चित्र पर की तरह कनेक्शन के इस प्रकार किया: enter image description here

तो भेजने वाले का कभी कभी सर्वर 1 के लिए कुछ भेजता है और सर्वर 1 यह और क्या सर्वर 2 और सर्वर 2 गणना संख्या को भेजने के लिए अद्यतन पढ़ता है और सी के साथ संचार कार्यक्रम।

यहाँ अपने सर्वर है 1 कोड:

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 

भेजने वाले है:

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) 

और सर्वर 2 इस तरह है:

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 

समस्या है कि सब कुछ एक साथ वास्तव में है भारी। मेरा मतलब है कि मैं प्रेषक से 2 संदेश भेज सकता हूं और सब कुछ वास्तव में धीमा चल रहा है। मैं पूरी चीज 10-15s चला सकता हूं और फिर यह जम जाता है। सभी कनेक्शन काम करते हैं, लेकिन वास्तव में धीरे-धीरे। मेरा सवाल है क्या मुझे कुछ याद आ रहा है या ऐसा कुछ है जो सर्वर को वास्तव में धीमा कर देता है? मैं इस बेहतर तरीके से कैसे कोड कर सकता हूं?

+0

रिमोट कॉलिंग/रिमोट मूल्यांकन के लिए आप [जूलिया के समांतर उपकरण] (http://docs.julialang.org/en/latest/manual/parallel-computing/) का उपयोग नहीं कर रहे किसी भी विशेष कारण से हैं? –

+0

मैं धीमेपन और न ही फ्रीज (लगभग 5 मिनट के लिए परीक्षण चला रहा हूं और 10 संदेश भेज रहा हूं) को पुन: उत्पन्न नहीं कर सका। मैंने विंडोज सिस्टम पर जूलिया 0.5 + आरसी 3 चलाने वाले सभी कार्यक्रमों के साथ परीक्षण किया और कोई धीमा नहीं था। सर्वर 2 को मैक में ले जाना (वाई-फाई नेटवर्क से जुड़ा हुआ) सर्वर 1 और 2 ठीक चला गया। शायद यह एक संस्करण या पर्यावरण की समस्या है? (उदा .: ओएस, हार्डवेयर, नेटवर्क, ...) – Gomiero

+0

आपका क्या मतलब है? क्या आप अधिक विशेष रूप से समझा सकते हैं कि आपका क्या मतलब है @FelipeLema –

उत्तर

1

मुझे अब धीमेपन के साथ समस्या नहीं है। मुझे जूलिया-यूजर गूगल फोरम से मदद मिली और उनमें से (तनमय के। महापात्रा) ने उसी उद्देश्य के लिए बेहतर कोड लिखा: https://gist.github.com/tanmaykm/c2ab61a52cc5afa0e54fe61905a48ef1 यह काम करता है।

दोनों कोडों के साथ एक समस्या यह है कि वे कनेक्शन को ठीक से बंद नहीं करते हैं। यदि सर्वर 2 नीचे चला जाता है, तो सर्वर 1 को लेखन त्रुटि मिलती है और सर्वर 1 सुनो मोड में रहता है।

अन्य तरीकों से यह काम करता है। तनमय के लिए धन्यवाद!

संपादित करें: धीमी ...., बात क्या बातें धीमा चाहिए पाया ऐसा किया। नींद की कमांड ने धीमी चीज़ों को धीमा कर दिया, लेकिन यह अपेक्षा से अधिक धीमा हो गया। अगर मेरे पास नींद परिवर्तनीय 0.001 सेकेंड था, तो यह पूरे सिस्टम को 0.014 एस धीमा कर देगा। तो मैंने नींद कमांड हटा दिया और यह ठीक काम करता है।

संबंधित मुद्दे