简体   繁体   English

有什么方法可以使LG WebOS服务保持活动状态吗?

[英]Is there any way to keep LG WebOS service alive?

I'm trying to create a JS service on WebOS 3.0 followed the official documentation. 我试图按照官方文档在WebOS 3.0上创建JS服务

I can send data between JS service and my application, but sometimes the JS service does not respond to the request if it's idled for like 20 seconds. 我可以在JS服务和我的应用程序之间发送数据,但是有时JS服务如果闲置了20秒钟左右就不会响应该请求。 I've also tried to increase the timeout per this . 我也尝试增加超时每本 Unfortunately, it does not seemed to be working. 不幸的是,它似乎没有用。

Here's my code 这是我的代码

Application Side 应用方

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)
        }
      })
    })

Service Side 服务端

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()
})

I recently wrote a JavaScript application for LG Smart-TVs and would highly recommend using socket.io for all communication between client and server. 我最近为LG Smart-TV编写了一个JavaScript应用程序,强烈建议使用socket.io进行客户端和服务器之间的所有通信。 It's a bit tricky getting it to work initially, but works flawlessly. 要使其最初开始工作有点棘手,但可以完美地工作。

Here's how the connection looks ... 这是连接的外观...

    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);

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

After that, it's all a matter of processing and formatting the returned data. 之后,只需要处理和格式化返回的数据即可。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM