我正在尝试将简单的iOS应用程序连接到sails.js API。 iOS应用程序是用swift编写的。帆的版本是0.11
对于Web套接字管理,我使用https://github.com/socketio/socket.io-client-swift
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.js控制台上,我收到以下错误:
div
我可能做错了模仿sails.io的行为,但我不知道如何实现它。
提前感谢您的帮助。
答案 0 :(得分:3)
您可以连接参数来告诉服务器您遵守v0.11.0语义,而不是更改服务器:
self.socket = SocketIOClient(socketURL: baseWebSocketServerURL, options:
[SocketIOClientOption.ConnectParams(["__sails_io_sdk_version":"0.11.0"])])
我认为这是一个比黑客攻击服务器和打破其他客户端的语义版本检查更好的解决方案。
答案 1 :(得分: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' 这可以解决您的问题。
答案 2 :(得分:0)
如果其他答案对您不起作用,请试一试:
let socket = SocketIOClient(socketURL: URL(string: "http://yoursailsserver.com:1337)")!, config: [.log(true), .forcePolling(true), .connectParams(["__sails_io_sdk_version":"0.11.0"])])
答案 3 :(得分:0)
只需在套接字URL的末尾添加?__sails_io_sdk_version=0.11.0
示例:
http://www.example.com:port/?__sails_io_sdk_version=0.11.0