Я намагаюся підключити простий додаток для iOS до API sails.js. Додаток iOS написано швидко. Версія вітрил становить 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, але я не знаю, як цього досягти.
Заздалегідь дякую за вашу допомогу.
Відповіді:
3 для відповіді № 1Замість зміни сервера ви можете підключити параметри, щоб сказати серверу, що ви відповідаєте семантиці v0.11.0 за допомогою:
self.socket = SocketIOClient(socketURL: baseWebSocketServerURL, options:
[SocketIOClientOption.ConnectParams(["__sails_io_sdk_version":"0.11.0"])])
Я думаю, що це краще рішення, ніж зламати сервер і зламати семантичну перевірку версій для інших клієнтів.
1 для відповіді № 2
Я знаю, що це не найкраще рішення. Але якщо ви переходите node_modulessailsnode_modulessails-hock-socketslibparse-sdk-metadata.js змінити handshake.query [SDK_META_PARAMS.version] = "0,9.0"; до "0,11,0" Це може вирішити вашу проблему.
0 для відповіді № 3
Якщо інша відповідь не спрацює для вас, дайте нам це зробити:
let socket = SocketIOClient(socketURL: URL(string: "http://yoursailsserver.com:1337)")!, config: [.log(true), .forcePolling(true), .connectParams(["__sails_io_sdk_version":"0.11.0"])])