Описание проблемы
Мы разместили сервер Parse в службах приложений Azure.Мы можем подключиться к живому запросу и подписаться на него.Мы получаем сообщения ниже.
2019-01-01 19: 03: 26.917094 + 0530 LiveQueryTest [59625: 972922] ParseLiveQuery: Отправка сообщения:
{"clientKey":"xxxxxx","op":"connect","sessionToken":"","applicationId":"xxxxxx"}
2019-01-01 19:03:27.285251+0530 LiveQueryTest[59625:972922] ParseLiveQuery: Received message: {"op":"connected","clientId":5}
2019-01-01 19:03:27.388337+0530 LiveQueryTest[59625:972922] ParseLiveQuery: Sending message: {"query":{"className":"PostQuestionMessage","where":{"type":2}},"requestId":1,"op":"subscribe"}
2019-01-01 19:03:27.600455+0530 LiveQueryTest[59625:972813] ParseLiveQuery: Received message: {"op":"subscribed","clientId":5,"requestId":1}
И мы подписаны на обновлениеСобытие, но когда мы обновили какие-либо записи, мы не получаем событие Назад.
На сервере:
Мы пытались прослушивать определенный порт «1337», как показано ниже: Каждый раз, когда мы делаем это, наш анализПанель инструментов и API перестает работать.Поэтому необходимо ли прослушивать определенный порт, например "1337" или var port = process.env.PORT ||1337;также будет работать для Live Query.
var httpServer = require('http').createServer(app);
var port = 1337;
httpServer.listen(port, function() {
console.log('Parse Server running at ${port}');
console.log("The value of port is " + port);
});
ParseServer.createLiveQueryServer(httpServer);
Ожидаемые результаты
Мы должны получить обновление события согласно нашей подписке.
Фактический результат
Не получено обновление событий согласно подписанному запросу,
Настройка среды
Сервер
parse-версия сервера (Будьте конкретны! Не говорите «последний».): [2.3.8]
Операционная система: [Linux]
[Удаленный сервер - Azure]
База данных
Версия MongoDB: [3.4]
[Удаленный сервер - Azure]
Журналы / Трассировка
Сервер:
[32minfo� [39m: Parse LiveQuery Server начинает работать
� [32minfo� [39m: Создать нового клиента: 1
Код клиента iOS:
import UIKit
import Parse
import ParseLiveQuery
class LiveQueryManager {
static let shared = LiveQueryManager()
var liveQueryClient = ParseLiveQuery.Client()
var subscription: Subscription<PostQuestionMessage>?
var messagesQuery: PFQuery<PostQuestionMessage> {
return (PostQuestionMessage.query()?
.whereKey("type", equalTo: 2)) as! PFQuery<PostQuestionMessage>
}
init(){
liveQueryClient.shouldPrintWebSocketLog = true
liveQueryClient.shouldPrintWebSocketTrace = true
}
fileprivate func printMessage(_ message: PostQuestionMessage) {
let createdAt = message.createdAt ?? Date()
print("\(createdAt) : \(message.message ?? "")")
}
func subscribeToUpdates() {
//https://stackoverflow.com/questions/44273455/parse-cloud-livequeries-ios-client-doesnt-work
self.subscription = self.liveQueryClient.subscribe(messagesQuery)
self.subscription = self.subscription?.handleEvent({ (_, event) in
switch event {
case .created(let object):
print("Event Created")
self.printMessage(object)
// do stuff
case .updated(let object):
print("Event Updated")
self.printMessage(object)
default:
break // do other stuff or do nothing
}
})
}
func disconnectFromSubscription() {
if let objSubcription = self.subscription {
self.liveQueryClient.unsubscribe(messagesQuery, handler: objSubcription)
}
}
func printSubscription () {
if let objSubscription = self.subscription {
print ("Subscription:\(objSubscription)")
print ("Client:\(self.liveQueryClient)")
print ("Client userDisconnected:\(self.liveQueryClient.userDisconnected)")
}
}
}