1

Configuration:Realm Object Server (ROS) sur AWS: comment faire une requête Websocket valide?

J'utilise iOS 11 et Xcode 9

Royaume d'essai pour la première fois et considérer comme une alternative à Firebase. Un serveur de test est opérationnel dans AWS EC sur la base de l'AMI publique de Tokyo fournie. Le tableau de bord fonctionne, en ajoutant des utilisateurs à partir de travaux de code Swift, même les domaines sont créés.

Problème:

Impossible d'écrire, soit obtenir "Connection [1]: poignée de main SSL a échoué: Fin prématurée de l'entrée" quand je l'utilise "domaines: //" ou « Connexion [1]: Échec de l'écriture: Fin de l'entrée "lors de l'utilisation de" realm: // "en tant qu'URL de serveur de synchronisation. Essayé de googler l'erreur SSL et n'a trouvé aucune correspondance. A partir du moment où les tutoriels sur le site de Realm ont été faits, beaucoup de code a changé, j'ai donc dû improviser, peut-être qu'il y a une erreur vraiment claire ou peut-être que c'est la configuration de mon serveur?

Voici mon code.

var realm: Realm? 
    if let serverURL = URL(string: "http://13.112.252.130:9080"){ 
     let usernameCredentials = SyncCredentials.usernamePassword(username: "raul", password: "abc123", register: false) 
     SyncUser.logIn(with: usernameCredentials, 
         server: serverURL) { user, error in 
         if let user = user { 
          print("User \(user) is admin: \(user.isAdmin)") 
          if let syncServerURL = URL(string: "realms://13.112.252.130:9080/~/addressBook") { 
           let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: syncServerURL)) 
           realm = try? Realm(configuration: config) 
           print("Successfully connected to realm!") 
           let contact = Contact() 
           contact.name = "John Doe" 
           contact.phone = "123456789" 
           contact.email = "[email protected]" 
           if let realm = realm { 
            self.contactResults = realm.objects(Contact.self).sorted(byKeyPath: "name", ascending: true) 
            try? realm.write { 
            realm.add(contact) 
            print("wrote to realm!") 
           } 
           } 

          } else if let error = error { 
           print("Error: \(error.localizedDescription)") 
          } 
         } 
     } 
    } 

Voici le journal des erreurs avec « realsms: // » et cela va dans une boucle infinie:

2017-09-02 07:37:18.223475+0700 RealmAdressbook[7253:3703339] refreshPreferences: HangTracerEnabled: 1 
2017-09-02 07:37:18.223532+0700 RealmAdressbook[7253:3703339] refreshPreferences: HangTracerDuration: 500 
2017-09-02 07:37:18.223551+0700 RealmAdressbook[7253:3703339] refreshPreferences: ActivationLoggingEnabled: 0 ActivationLoggingTaskedOffByDA:0 
User is admin: false 
Successfully connected to realm! 
2017-09-02 07:37:19.319628+0700 RealmAdressbook[7253:3703453] Sync: Opening Realm file: /var/mobile/Containers/Data/Application/2A52579D-4863-4FC3-88DA-31F2EC2549E5/Documents/realm-object-server/64e042b0-d753-4ebf-b5a4-de8f8f56142f/realms%3A%2F%2F13.112.252.130%3A9080%2F%7E%2FaddressBook 
2017-09-02 07:37:19.320459+0700 RealmAdressbook[7253:3703453] Sync: Connection[1]: Session[1]: Starting session for '/var/mobile/Containers/Data/Application/2A52579D-4863-4FC3-88DA-31F2EC2549E5/Documents/realm-object-server/64e042b0-d753-4ebf-b5a4-de8f8f56142f/realms%3A%2F%2F13.112.252.130%3A9080%2F%7E%2FaddressBook' 
2017-09-02 07:37:19.320591+0700 RealmAdressbook[7253:3703453] Sync: Connection[1]: Resolving '13.112.252.130:9080' 
2017-09-02 07:37:19.322722+0700 RealmAdressbook[7253:3703453] Sync: Connection[1]: Connecting to endpoint '13.112.252.130:9080' (1/1) 
2017-09-02 07:37:19.458271+0700 RealmAdressbook[7253:3703453] Sync: Connection[1]: Connected to endpoint '13.112.252.130:9080' (from xxxxxxxxxxxxx) 
2017-09-02 07:37:19.597335+0700 RealmAdressbook[7253:3703453] Sync: Connection[1]: SSL handshake failed: Premature end of input 
2017-09-02 07:37:19.597609+0700 RealmAdressbook[7253:3703453] Sync: Connection[1]: Connection closed due to error 

Et c'est le journal quand je l'utilise « domaine: // », va en boucle ainsi:

2017-09-02 07:41:00.362705+0700 RealmAdressbook[7263:3705293] refreshPreferences: HangTracerEnabled: 1 
2017-09-02 07:41:00.362762+0700 RealmAdressbook[7263:3705293] refreshPreferences: HangTracerDuration: 500 
2017-09-02 07:41:00.362782+0700 RealmAdressbook[7263:3705293] refreshPreferences: ActivationLoggingEnabled: 0 ActivationLoggingTaskedOffByDA:0 
User is admin: false 
Successfully connected to realm! 
wrote to realm! 
2017-09-02 07:41:01.524168+0700 RealmAdressbook[7263:3705496] Sync: Opening Realm file: /var/mobile/Containers/Data/Application/36B5D609-1E8B-48FD-B20A-F5DF4EB21384/Documents/realm-object-server/64e042b0-d753-4ebf-b5a4-de8f8f56142f/realm%3A%2F%2F13.112.252.130%3A9080%2F%7E%2FaddressBook 
2017-09-02 07:41:01.525491+0700 RealmAdressbook[7263:3705496] Sync: Connection[1]: Session[1]: Starting session for '/var/mobile/Containers/Data/Application/36B5D609-1E8B-48FD-B20A-F5DF4EB21384/Documents/realm-object-server/64e042b0-d753-4ebf-b5a4-de8f8f56142f/realm%3A%2F%2F13.112.252.130%3A9080%2F%7E%2FaddressBook' 
2017-09-02 07:41:01.526011+0700 RealmAdressbook[7263:3705496] Sync: Connection[1]: Resolving '13.112.252.130:9080' 
2017-09-02 07:41:01.527816+0700 RealmAdressbook[7263:3705496] Sync: Connection[1]: Connecting to endpoint '13.112.252.130:9080' (1/1) 
2017-09-02 07:41:01.663245+0700 RealmAdressbook[7263:3705496] Sync: Connection[1]: Connected to endpoint '13.112.252.130:9080' (from '192.168.1.4:59862') 
2017-09-02 07:41:01.819181+0700 RealmAdressbook[7263:3705496] Sync: Connection[1]: Writing failed: End of input 
2017-09-02 07:41:01.819320+0700 RealmAdressbook[7263:3705496] Sync: Connection[1]: Connection closed due to 
error 

journaux du serveur, il semble que quelque chose ne va pas avec mes en-têtes de demande, comment résoudre ce problème?

proxy: [syncProxy] internal error: Error: socket hang up at createHangUpError (httpclient.js:253:15) at Socket.socketOnEnd (httpclient.js:345:23) at emitNone (events.js:91:20) at Socket.emit (events.js:185:7) at endReadableNT (streamreadable.js:974:12) at combinedTickCallback (internal/process/nexttick.js:80:11) at process.tickCallback (internal/process/nexttick.js:104:9). 
1:51:33 AMinfo 
sync: HTTP Connection[714]: Connection closed due to error 
1:51:33 AMerror 
sync: HTTP Connection[714]: Check the proxy configuration and make sure that the HTTP request is a valid Websocket request. The header values are case sensitive 
1:51:33 AMerror 
sync: HTTP Connection[714]: The HTTP request with the error is: GET /realm-object-server HTTP/1.1 
connection: Upgrade 
host: 13.112.252.130 
sec-websocket-key: 7FDPgyFxq/GT1tKfIMJNcg== 
sec-websocket-protocol: io.realm.sync.19 
sec-websocket-version: 13 
upgrade: websocket 
x-realm-access-token: eyJhY2Nlc3MiOlsiZG93bmxvYWQiLCJ1cGxvYWQiLCJtYW5hZ2UiXSwiYXBwX2lkIjoiY29tLmJhbWJhbWxhYnMuUmVhbG1BZHJlc3Nib29rIiwiZXhwaXJlcyI6MTUwNDM3ODg4NiwiaWQiOiJlMjI0YTM5NmU4YTI0OWU1ODlhNWQ4OWM0ODczOTMzOCIsImlkZW50aXR5IjoiNjE1ZWUxMjU0MDA4ZDA5MWJiYTc1MjU4YTAyZWViZjYiLCJwYXRoIjoiLzYxNWVlMTI1NDAwOGQwOTFiYmE3NTI1OGEwMmVlYmY2L215UmVhbG0ifQ==:hyX8GtVHMIBho3Zw6pZfp9Gnl6O0C0Rl73V0EdX/a4ZWXMxcySFZmWbs0CxmjnpZUDNnFDK3PpXspN1YnGu2c5ByuRIpgpT7hkzwAil2EQzFeKFycYXwTbsp3a6X9npHETjxUfe9QWIIA5drz3VRPUI+0Tj+qspjbyPBcMhL6ZH3A8ubZHOIpjJpxRWGZbghdznf0g71Ta0SDyCYT4GB+fHuddzUH7RZgLkzBfoyIdJyfGccwVi1Qe/c0GTPzkH12TSyzHSwx9PnGadl1vBRuPci6fs+TE03rx6Gy7v73I37JpVVsiPm1omMG7FBdi60iQYQvItiycnle/rvb6+u3w== 
x-realm-path: /615ee1254008d091bba75258a02eebf6/myRealm 

1:51:33 AMerror 
sync: HTTP Connection[714]: There must be a header of the form 'Sec-WebSocket-Protocol: io.realm.protocol' 
1:51:33 AMinfo 
sync: HTTP Connection[714]: Received: Sync HTTP request(protocol_version=-1) 

Répondre

2

La raison de l'échec dans le cas SSL et dans le cas non SSL est probablement différente.

Pour le cas SSL, êtes-vous sûr de vouloir utiliser le port 9080? Habituellement, Realm utilise 9443.

Pour le cas non-SSL, le problème est que les en-têtes ont apparemment été réécrits par un proxy intermédiaire. La requête reçue par le serveur est différente de celle attendue. Nous pouvons résoudre ce problème au Royaume. La seule chose que vous pouvez faire maintenant est de changer de proxy. Merci d'avoir signalé cela.

Réponse éditée: Pour le cas non-SSL, la raison pour laquelle les en-têtes ne sont pas reconnus par le serveur est que vous utilisez une ancienne version du serveur. Il semble que vous ayez mis à jour le client sans mettre à niveau le serveur. Essayez d'utiliser la dernière version du serveur.