2

シンプルな iOS アプリを Sails.js API に接続しようとしています。iOS アプリは迅速に書かれています。帆のバージョンは 0.11

Web ソケット管理には、https://github.com/socketio/socket.io-client-swiftを使用します

class Communicate: UIViewController {

let socket = SocketIOClient(socketURL: "localhost:2000")

override func viewDidLoad() {
    super.viewDidLoad()
    self.addHandlers()
    self.socket.connect()
}

func addHandlers() {

    socket.on("connect") {data, ack in
        print("socket connected !") // This is working

        self.socket.emit("get", ["url": "/device"]) // I get the sails error
    }

}
}

Sails.js コンソールで、次のエラーが表示されます。

verbose: Receiving incoming message from Socket.io:  { url: '/device?__sails_io_sdk_version=0.11.0&__sails_io_sdk_platform=iOS&__sails_io_sdk_language=fr' }

error: Error (SAILS:HOOK:SOCKETS:PARSE_VIRTUAL_REQ):: Failed to parse incoming socket.io request.

details: 'Sails v0.11.x is not compatible with the socket.io/sails.io.js client SDK version you are using (0.9.0). Please see the v0.11 migration guide on http://sailsjs.org for more information.' }

私はおそらくsails.ioの動作を模倣するために何か間違ったことをしていますが、それを達成する方法がわかりません.

あらかじめご了承ください。

4

4 に答える 4

3

サーバーを変更する代わりに、パラメーターを接続して、v0.11.0 セマンティクスに準拠していることをサーバーに伝えることができます。

self.socket = SocketIOClient(socketURL: baseWebSocketServerURL, options: 
[SocketIOClientOption.ConnectParams(["__sails_io_sdk_version":"0.11.0"])])

これは、サーバーをハッキングして他のクライアントのセマンティック バージョン チェックを破るよりも優れたソリューションだと思います。

于 2015-11-20T09:08:46.930 に答える
1

これが最善の解決策ではないことはわかっています。しかし、node_modules\sails\node_modules\sails-hook-sockets\lib\parse-sdk-metadata.js に行くと、handshake.query[SDK_META_PARAMS.version] = '0.9.0'; を変更します。「0.11.0」に変更することで問題を解決できます。

于 2015-11-07T09:05:01.743 に答える
0

?__sails_io_sdk_version=0.11.0ソケット URL の末尾に追加するだけです

例: http://www.example.com:port/?__sails_io_sdk_version=0.11.0

于 2020-02-06T10:48:14.853 に答える