Unitt: WebSocket-Verbindung herstellen

  • Ich verwende die Unitt-Bibliothek ( http: // code.google.com/p/unitt/wiki/UnittWebSocketClient ), um über WebSockets in meiner iOS (iPhone) -Anwendung eine Verbindung zu einem lokalen Server herzustellen.

    Ich habe das Projekt erfolgreich konfiguriert und füge die erforderlichen Projektdateien bei. Aus irgendeinem Grund kann ich jedoch keine einfache Verbindung herstellen. Ich verwende den folgenden Code:

    in SomeWebsocket.m:

     WebSocketConnectConfig* config = [WebSocketConnectConfig configWithURLString:@"ws://localhost" origin:nil protocols:nil tlsSettings:nil headers:nil verifySecurityKey:YES extensions:nil ];
    config.closeTimeout = 15.0;
    ws = [WebSocket webSocketWithConfig:config delegate:self];
    [ws open];
     

    in SomeViewController.m:

     MyWebSocket* myWS =[[MyWebSocket alloc] init];
    [myWS startMyWebSocket];
     

    Beim Ausführen des Skripts lautet die einzige Ausgabe [über Konsole / NSLog]:

    Oops. Ein Fehler ist aufgetreten.

    Oops. Es wurde geschlossen.

    Das einzige, woran ich denken kann, ist, dass ich beim Versuch, den Handshake / Login durchzuführen, keine zusätzlichen Informationen schicke das sollte ich sein. Der Server erwartet unter anderem einen Benutzernamen. Könnte dies das Problem sein oder ist es etwas, das nichts damit zu tun hat.

    Ich arbeite schon seit einiger Zeit daran und kann es herausfinden, also würde ich es definitiv schätzen Hilfe. Danke.

    BEARBEITEN: Ohne Änderungen bekomme ich jetzt auch Fehler wie folgt:

    * Assertionsfehler in - [AsyncSocket doCFReadStreamCallback: forStream:], /Users/jmorris/Projects/xCode/UnitT/UnittWebSocketClient/trunk/UnittWebSocketClient/AsyncSocket.m:2811 * Beenden der App aufgrund der nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültiger Parameter nicht : theReadStream! = NULL'

    < / blockquote>
    22 November 2011
    John Smith
3 answers
  • Wissen Sie, welche Version der Websocket-Spezifikation der Server ausführt? Ich gehe davon aus, dass Ihre Client-Version und Ihre Server-Version nicht übereinstimmen. Nur in den späteren Versionen der Spezifikation gibt es eine klare Möglichkeit, solche Dinge zu kommunizieren und zu handhaben. Ich arbeite gerade an einem Update der neuesten Version, aber die Feiertage haben solche Dinge in letzter Zeit etwas schwierig gemacht. :)

    02 December 2011
    Josh Morris
  •  WebSocketConnectConfig* config = [WebSocketConnectConfig 
                                      configWithURLString:kWebsocketURL 
                                      origin:nil
                                      protocols:nil 
                                      tlsSettings:nil 
                                      headers:nil 
                                      verifySecurityKey:YES 
                                      extensions:nil];
    
    config.closeTimeout = -1;
    config.timeout = -1;
       //   config.keepAlive = 5.0; //send ping from the server to keep socket alive 
    WebSocket *ws1 = [WebSocket webSocketWithConfig:config delegate:shared];
     

    Dies ist der Code, den ich verwende, und er funktioniert einwandfrei. Ich hatte Probleme mit dem Stopptimer, also ping ich nicht vom Client, sondern nur vom Server.

    04 July 2012
    vatti
  • Sie sollten SocketRocket , eine von uns kürzlich veröffentlichte WebSocket-Bibliothek, ausprobieren. Unterstützt RFC 6455 (letzter Standard). Keine CocoaAsyncSocket-Abhängigkeiten.

    13 February 2012
    mikelikespie