网页实时显示手机端内容

2016-04-23 09:12:37 +08:00
 JhOOOn

最近在做一个工作,需要网页端实时显示手机端内容,如果手机因各种原因的断开(包括断网),网页会回到初始页,支持多个网页和多个手机的一对一的连接。

目前的方法是,使用 python 的 twisted 实现的,但总会出现各种原因,比如:

  1. 出现手机断开,网页没有收到消息,没有回到初始页
  2. 莫名其妙的出现断开,
  3. 网页与服务器通信是通过长轮询实现的,有更好的方法实现网页和服务器的交互吗?
  4. 目前使用的网页和手机相互识别使用的是输入一个 id 号,有更好的方法吗?
  5. 对 twisted 理解不够透彻

另外,性能不是问题,同时使用的就几个设备。只是想提供更好的体验效果 有更好的方法实现吗?

javascript , python , Go 实现的方法?请大家指导一二。

毕竟 simple is better 。

5093 次点击
所在节点    Python
14 条回复
oglop
2016-04-23 09:17:42 +08:00
这是要做 airdroid 么
JhOOOn
2016-04-23 09:21:10 +08:00
@oglop 不是的,我刚看了下你说的,就做其中一个‘小屏幕映射到大屏幕’这种功能。
ljcarsenal
2016-04-23 09:26:19 +08:00
网页显示手机上的什么内容?是手机上的网页还是类似手机助手那种显示截屏的
JhOOOn
2016-04-23 09:34:32 +08:00
@ljcarsenal 截屏
pimin
2016-04-23 09:49:49 +08:00
不清楚业务模式,不懂编程,请允许我 YY 下:
我推测是:手机装了 APP ,服务器时时响应手机连接,收到消息并通过网页展示。网页和服务器不是在一起么?
我觉得他们之间并不需要什么通信,服务器收到消息可以加上一个时间标签写入消息池。
网页服务从消息池读取消息,如果当前时间和消息的时间标签差大于 1 秒就判定为离线。
我觉得重点是前端,网页时时更新内容,能带来更好的体验,同时也是最困难的部分。

网页和手机相互识别目的是什么。。
Weakdancer
2016-04-23 09:50:13 +08:00
参考 trinusvr
http://trinusvr.com/
http://trinusvr.com/help/setup-guide/

其中指出通过 usb 建立局域网( Usb Tethering )的方式是延迟最小的。
https://support.google.com/nexus/answer/2812516?hl=en
JhOOOn
2016-04-23 10:05:27 +08:00
@pimin 网页端和手机端是一对一的,会有好几个不同的网页端和手段, eg : [( PC1 , Phone1 ),( PC2 , Phone2 ),。。] 。你说的大于 1 秒就判定离线会出现这样的情况:手机每隔几秒发送一个,就需要不断的重新建立连接,所以这里需要保存一个长连接,因为重新建立连接是很费资源的。
learnshare
2016-04-23 11:12:57 +08:00
github openstf/stf
chinuno
2016-04-23 11:28:14 +08:00
Websocket ?
matsuijurina
2016-04-23 11:43:12 +08:00
我为了某个产品发布活动做过类似事情,网页端投影到大屏幕,客户的手机端 app 是用 phonegap 包装起来的 framerjs 动态原型(当然用其它的 js 框架,比如 ionic 、 framework7 之类的也差不多)。网页端同样也是 framerjs 。所有需要同步的操作事件都绑定 websocket 与后端通讯,后端是用 socket.io 做的。实现的效果大概是,我在大屏幕上演示 app 的某个功能,客户的手机端 app 显示的内容实时跟着动,如果开启双向同步权限,客户的操作也能反映到大屏幕上。说白了就是把手游的那一套搬到 app 上了。

在做这个方案之前,也想过录屏直播、定期截屏等等方案,但最后选定的这个方案是最节省资源,同步效率最高的,不在会场的外地客户也同样可以有一致的体验。

和楼主不同的地方,我们这个是一对多或多对一,楼主的需求是一对一的。客户端和演示端的认证,我们是用 JWT 的 Token 配合 Socket.io 做的。
2225377fjs
2016-04-23 12:05:45 +08:00
手机通过 TCP 长连接把截屏信息发送到服务器(比如说是一秒钟截屏一次之类的),然后服务器再将截屏的图片数据推送到 web 上面做显示。。。?
手机断开服务器不知道的问题,如果是移动网络环境的话,建议打开 TCP 的 keepalive ,或者自己做心跳监控。
服务器向 web 端推送截屏数据可以通过 websocket 这类的方案来做。
网页和手机相互对应,可以做一个中心的注册管理,手机上线了之后,向注册中心注册自己的信息,然后 web 端可以通过一个列表选择来查看自己想看的手机就好了。。,如果手机下线,直接通知 web 端就好了。


说这么多,要实现这些关键还得看楼主是否有这些相关的技术积累了, node.js , Python , Go 肯定都能实现。

(如果楼主这需求是很重要的话,我可以远程和你一起做做玩玩,服务器方面的我可以包办了, html 界面部分你自己做,手机端你自己做,或者也可以给你提供一些关键基础代码,你自己写, python 的)
gamexg
2016-04-23 13:50:05 +08:00
做过 andriid 和网页同步显示,不过不是截屏显示。资源都是从七牛下载的,只同步摄像机视角等内容。

使用的 socket.io 做的实时通信, android 通过 socket.io
实时上报视角等信息, socket.io 直接转发给 web 端。

socket.io 有现成的 android 库、 python 库。注意一下 soxket. io 0.2 修改了 redis 协议,不兼容与 0.1 。
当时切换服务器时未锁定版本号,从新安装时变成了 0.2 ,结果 python 库挂了,折腾了一天给 python 库打了个补丁才解决。
gamexg
2016-04-23 14:03:03 +08:00
轮询中断可能是被 android 系统给关闭了。

说一个在网上没公开的 android 长连接推送保持的办法, android 下唯一可以保证休眠下也可工作的定时器是 AlarmManager ,但是厂家都做了各种限制,已经非常不可靠了。
找到了一个奇怪的做法:用来做到长连接心跳保持,由服务器端发起心跳来定时唤醒客户端来实现心跳及定时器功能。这种方法可以解决 AlarmManager 频率被限制的问题。

另外建议包名包含 gps 等关键字,反编译 zte 的系统,发现有一个白名单, qq 、微信、 gps 等 app 可以避免被省电。
JhOOOn
2016-04-23 17:13:25 +08:00
@matsuijurina
@gamexg
@2225377fjs
已感谢,提供了很好的方案,回去尝试,多谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX