Frage

Ich verwende SpyMemCached, um auf einem Server auf Memcached zuzugreifen. Ich begann mit dem folgenden Befehl Memcached

memcached -m 4096 -p 11211 -u memcache -l 127.0.0.1 -d -vvv

Und ich verwende den folgenden Treiber, um einige Schlüssel-/Wertpaare in Memcache zu setzen. Aus irgendeinem Grund nach dem letzten get Operation, die main Funktion hängt nur; Es endet nie.

import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;

public class memcache {
        public static void main(String args[]) {
                //Connect to Memcache.
                MemcachedClient c=null;
                try{   
                        c = new MemcachedClient(
                                new InetSocketAddress("127.0.0.1", 11211));
                } catch (Exception e) {
                        System.err.println("Could not connect to Memcached.");
                        System.exit(-1);
                }
                System.out.println("Connected to Memcached.");
                Object myObject = null;
                for (int i = 0; i < 10; i++)
                {
                        c.set(new String("HELLO"), 3600, i+1);
                        myObject=c.get("HELLO");
                        String value = myObject.toString();
                        System.out.println("***" + value);
                }
                System.out.println("Done.");
                return;
        }
}

Ich erhalte die folgende Ausgabe, aber die Anwendung endet nie.

2011-12-04 14:18:31.839 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
Connected to Memcached.
2011-12-04 14:18:31.844 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@578088c0
***1
Done.

Der Server meldet den folgenden Status:

<32 server listening (udp)
<33 new auto-negotiating client connection
33: going from conn_new_cmd to conn_waiting
33: going from conn_waiting to conn_read
33: going from conn_read to conn_parse_cmd
33: Client using the ascii protocol
<33 set HELLO 512 3600 1
33: going from conn_parse_cmd to conn_nread
> NOT FOUND HELLO
>33 STORED
33: going from conn_nread to conn_write
33: going from conn_write to conn_new_cmd
33: going from conn_new_cmd to conn_waiting
33: going from conn_waiting to conn_read
33: going from conn_read to conn_parse_cmd
<33 get HELLO
> FOUND KEY HELLO
>33 sending key HELLO
>33 END
33: going from conn_parse_cmd to conn_mwrite
33: going from conn_mwrite to conn_new_cmd
33: going from conn_new_cmd to conn_waiting
33: going from conn_waiting to conn_read

Welches Problem könnte das verursachen main Funktionieren Sie niemals enden? Hat jemand irgendwelche Vorschläge?

War es hilfreich?

Lösung

Die Lösung war einfach. Der Kunde muss die Verbindung trennen, wenn es fertig ist:

c.shutdown(...)

Keines der Beispiele enthält diesen kritischen Schritt.

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