Описание проблемы
Мы разместили сервер 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», как показано ниже: каждый раз, когда мы это делаем, наша панель Parse Dashboard и 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-server (будьте конкретны! Не говорите «последняя»). [2.3.8]
Операционная система: [Линукс]
[Удаленный сервер — 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)")
}
}
}