2

我正在尝试将一个简单的 iOS 应用程序连接到sails.js API。iOS 应用程序是用 swift 编写的。帆的版本是 0.11

对于网络套接字管理,我使用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

如果其他答案对您不起作用,请试一试:

    let socket = SocketIOClient(socketURL: URL(string: "http://yoursailsserver.com:1337)")!, config: [.log(true), .forcePolling(true), .connectParams(["__sails_io_sdk_version":"0.11.0"])])
于 2017-02-05T10:28:14.967 回答
0

只需?__sails_io_sdk_version=0.11.0在您的套接字网址末尾添加

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

于 2020-02-06T10:48:14.853 回答