V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
JhOOOn
V2EX  ›  Python

网页实时显示手机端内容

  •  
  •   JhOOOn · 2016-04-23 09:12:37 +08:00 · 5074 次点击
    这是一个创建于 3143 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    毕竟 simple is better 。

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

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

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

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


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

    (如果楼主这需求是很重要的话,我可以远程和你一起做做玩玩,服务器方面的我可以包办了, html 界面部分你自己做,手机端你自己做,或者也可以给你提供一些关键基础代码,你自己写, python 的)
    gamexg
        12
    gamexg  
       2016-04-23 13:50:05 +08:00 via Android   ❤️ 1
    做过 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
        13
    gamexg  
       2016-04-23 14:03:03 +08:00 via Android
    轮询中断可能是被 android 系统给关闭了。

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

    另外建议包名包含 gps 等关键字,反编译 zte 的系统,发现有一个白名单, qq 、微信、 gps 等 app 可以避免被省电。
    JhOOOn
        14
    JhOOOn  
    OP
       2016-04-23 17:13:25 +08:00
    @matsuijurina
    @gamexg
    @2225377fjs
    已感谢,提供了很好的方案,回去尝试,多谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2572 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:30 · PVG 23:30 · LAX 07:30 · JFK 10:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.