Frage

Ich erstelle einen Rubin-Server, der auf einen TCP-Client eine Verbindung herstellt. Mein Server wird mit einem TCPServer und ich bin versucht, TCPServer :: recv () zu verwenden, aber es wartet nicht auf Daten, so geht nur in einer engen Schleife, bis Daten empfangen werden.

Was ist der effizienteste Weg, intermittant Daten zu verarbeiten? Ich bin nicht in der Lage die Daten zu ändern, in gesendet werden, da ich bin versucht, einen anderen Server zu emulieren. Welche lesen sich wie Anweisung von TCPServer / TCPSocket für Daten gesendet warten würde?


    require "socket"
    dts = TCPServer.new('localhost', 20000)
    s = dts.accept
    print(s, " is accepted\n")
    loopCount = 0;
    loop do
      Thread.start(s) do
        loopCount = loopCount + 1
        lineRcvd = s.recv(1024)
        if ( !lineRcvd.empty? )
          puts("#{loopCount} Received: #{lineRcvd}")
          s.write(Time.now)
        end
      end
    end
    s.close
    print(s, " is gone\n")

Vielen Dank für Ihre Zeit.

War es hilfreich?

Lösung

Sie sind sicher, dass recv kehrt nicht „“ - Was bedeutet der Socket geschlossen ist? Wenn nicht, dann vielleicht werden Ihre Steckdosen auf nicht blockierende irgendwie?

eventmachine ist in der Tat weit schneller als Fäden für die Socket-Programmierung mit :) GL. -r

Andere Tipps

Auf der Grundlage der Fragen, die Sie haben gefragt, ich glaube, Sie einen Rahmen wie eventmachine versuchen sollten, und einen Server schreiben, die implementiert, was Sie wollen, anstatt zu versuchen mit dem Schreiben einen Server-Wrapper Aufheben um.

aber sagt, dass die effizienteste Art und Weise aus der Steckdose zu lesen ist, einen richtigen wählen Anruf zu verwenden und all offene Verbindungen abfragen. Zwar ist dies eine ziemlich akademische Sache für alle, die vor dem Client-Server-Anwendungen entwickelt haben, ist es ein Ärgernis, weil es eine Menge Dinge, die können Sie ganz einfach falsch. Zum Beispiel. mehr Verbindungen Umgang mit allen Arten von lästigen Situationen führen kann, wenn Sie nicht besonders vorsichtig sind Anrufe zu vermeiden, blockiert wird.

Der Rahmen eventmachine macht es einfach, Frage / Antwort-Typ-Server zu entwickeln, weil Sie immer mit einer Vorlage und arbeitet von dort aus starten können, zum Beispiel, die ich im internen :: eventmachine Protokollen :: LineAndTextProtocol man arbeitet als eine große Basis für die meisten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top