Есть ли способ сохранить сервис LG WebOS живым?

1

Я пытаюсь создать службу JS на WebOS 3.0, следуя официальной документации.

Я могу отправлять данные между службой JS и моим приложением, но иногда служба JS не отвечает на запрос, если он простаивает примерно 20 секунд. Ive также попытался увеличить таймаут за это. К сожалению, он, похоже, не работает.

Вот мой код

Сторона приложения

const request = webOS.service.request('luna://com.myapp.service', {
        method : 'fetch',
        parameters : { url, method, headers, body },
        onFailure : (err) => {
          reject(err)
        },
        onSuccess : (s) => {
          console.log('request success', s)
        },
        onComplete : (resp) => {
          const isSuccess = resp.data.status >= 200 && resp.data.status < 400
          var payload = {
            json : () => Promise.resolve(JSON.parse(resp.data.body)),
            ok : isSuccess,
            headers : resp.data.headers,
            status : resp.data.status,
            error : isSuccess
              ? null
              : resp.data.body
          }
          resolve(payload)
        }
      })
    })

Сторона обслуживания

var Service = require('webos-service')
var service = new Service('com.myapp.service')

service.register('fetch', function(message) {
var payload = message.payload
  if(!payload) {
    message.respond({
      returnValue : true,
      error : 'Message does not have a 'payload''
    })
    return
  }
  var url = payload.url,
      headers = payload.headers,
      method = payload.method,
      body = payload.body
  var request = http.request({
    method : method,
    hostname : URL.parse(url).hostname,
    path : URL.parse(url).path,
    headers : headers,
  }, function(res) {
    var data = ''
    res.on('data', function(chunk) { data+=chunk })
    res.on('end', function() {
      message.respond({
        returnValue : true,
        data : {
          status : res.statusCode,
          statusText : res.statusMessage,
          headers : res.headers,
          body : data,
        }
      })
    })
  })
  request.on('error', function(err) {
    console.log(err)
    message.respond({
      returnValue : true,
      error : err
    })
  })
  request.end()
})
  • 0
    Есть ли какие-либо ошибки на сервисной стороне? Это закрыто для того, чтобы бежать слишком долго? Запрос занимает больше 5 секунд или около того? Мне сложно разобрать этот код, но я не вижу ничего очевидного.
Теги:
webos

1 ответ

1

Недавно я написал приложение для LG Smart-TV и настоятельно рекомендую использовать socket.io для всей связи между клиентом и сервером. Это немного сложно заставить его работать на начальном этапе, но работает безупречно.

Вот как выглядит соединение...

    var socket = io("http://10.27.101.95");
    idUser = getCookie("idUser");   // Retrieved from device and set to cookie.

// ┌────────────────────────────────────────────────────────────────┐
// │   Socket.io: Connect/Emit                                      │

    socket.on('connect', function() {
        socket.emit("addUser", {
            "idUser": idUser
        });
        reconnectHideData = false;
    });

    // Hide data if server cannot be reached.
    var reconnectCount = 0;
    var reconnectHideData = false;
    socket.on('reconnect_error', function() {
        if (reconnectCount < 10 && reconnectHideData == false) {
            // console.log( '---=== Reconnect attempt: ' + reconnectCount + ' ===---' );
            setTimeout(function(){
                reconnectCount++;
            }, 3000);
        }
        if (reconnectCount == 10 && reconnectHideData == false) {
            // console.log( '-----===== Cleared Data =====-----' );
            $('.section ').addClass(' u-hide ');
            $('.greeting').addClass(' u-hide ');
            reconnectHideData = true;
            reconnectCount = 0;
        }
        else {
            return;
        }
    });

    // Necessary to trigger event to be emitted server side.
    setInterval(function(){
        socket.emit("reqData");
    }, 5000);

// └────────────────────────────────────────────────────────────────┘

После этого все зависит от обработки и форматирования возвращаемых данных.

  • 0
    Для сообщений, отправляемых с телевизора на сервер, являются ли сокеты единственным вариантом? Разве нельзя использовать что-то вроде AJAX для отправки POST-запроса на сервер?
  • 1
    @nuwanjaya - Абсолютно. Длинный опрос AJAX работает достаточно легко - и если это приложение, которое будет использовать только горстка людей, то это жизнеспособный вариант (просто избегайте коротких опросов вообще). Тем не менее, websocket гораздо менее требователен к аппаратному обеспечению и пропускной способности. Вот отличная статья, которая объясняет это более подробно ... blog.baasil.io/…
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню