一.WebSocket通讯

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与server全双工通信。

为保证socket不间断。使用下面类库进行socket通讯。

https://github.com/joewalnes/reconnecting-websocket

1.初始化Socket

loadSocket = function () {
try {
if ("WebSocket" in window) {
ws = new ReconnectingWebSocket(url, null, { debug: true, maxReconnectAttempts: 10 });
}
else if ("MozWebSocket" in window) {
ws = new MozWebSocket(url);
} else {
// document.getElementById("message_output").innerHTML = "浏览器不支持WebSocket";
}
ws.onopen = function ()
//document.getElementById("message_output").innerHTML = "连接server成功" + "<br/>";
}
ws.onclose = function () {
// document.getElementById("message_output").innerHTML = "与server断开连接" + "<br/>";
}
ws.onerror = function () {
//document.getElementById("message_output").innerHTML = "通信错误发生" + "<br/>";
}
ws.onmessage = function (msg) {//接收到消息
receiveSocketMessage(msg);
}
} catch (ex)
{ }
};

2.接收Socket消息

receiveSocketMessage = function (msg) {
var msgObj = JSON.parse(msg.data);
var type = msgObj.type;
var content = msgObj.content;
console.log(msgObj);
};

3.发送Socket消息

sendSocketMessage = function (msg) {//发送消息
if (ws) {
ws.send(msg);
}
};

4.应用场景

这样的方式能够做多台client的同步、前台与后台的同步,比方第一台client编辑的内容实时同步到第二台client。这时候就能够用socket通讯。

可是一机双屏用这样的方式须要过多关注socket后台的控制。所以採用另外一种方式实现

二.localStorage

通过监听localStorage的数据变化实现同一浏览器下不同页面之间的通讯,比脚本函数直接控制更加便捷。

(跨域不适用。须要结合postmessage)

推荐lsbridge库直接进行应用。https://github.com/krasimir/lsbridge

1.发送消息

lsbridge.send('my-namespace', { message: 'Hello world!' });

2.监听消息

lsbridge.subscribe('my-namespace', function(data) {
console.log(data); })

3.应用场景

比方同一时候打开业务系统和地图系统,定位地图,画图内容返回到业务平台等应用。

三.总结

两种方式都是html5的技术应用。所以要注意兼容性。在合适的场景选择合适的技术。

BS一机双屏的解决方式的更多相关文章

  1. 使用Reveal来查看别人的APP界面+白苹果不刷机解决方式

    Reveal这个强大的界面调试工具.能够实时查看.改动view的属性,大体上实现了iOS程序猿梦寐以求的功能.比方,有时候我们加入了一个view,可是那个view死活不显示出来,这时候祭出Reveal ...

  2. Mac OS X 10.10, Eclipse+ADT真机调试代码时,Device Chooser中不显示真机的解决方式

    Mac OS X 10.10的环境下.Eclipse+ADT,进行真机调试时,会出现一个问题. Device Chooser对话框里不显示真机设备,仅仅有又一次插拔数据线才干够. 经过測试.有两个暂时 ...

  3. 批处理安装Windows服务,提示"InstallUtil.exe"不是内部命令也不是外部命令解决方式

    今天在测试一个C#写的windows服务的时候,在用bat进行调用cmd安装的时候, cd C:\Windows\Microsoft.NET\Framework\v2.0.50727 InstallU ...

  4. 浏览器关闭使session失效的问题多种解决方式

    直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈   如果用户不点击网站的“退出”链 ...

  5. NAT的全然分析及其UDP穿透的全然解决方式

    NAT的全然分析及其UDP穿透的全然解决方式   一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)觉得未经授权的的包丢弃,防火墙仅仅是检验包的数据,并不改动数据包中的IP地址和 ...

  6. Linux转发性能评估与优化-转发瓶颈分析与解决方式(补遗)

    补遗 关于网络接收的软中断负载均衡,已经有了成熟的方案,可是该方案并不特别适合数据包转发,它对server的小包处理非常好.这就是RPS.我针对RPS做了一个patch.提升了其转发效率. 下面是我转 ...

  7. ssh远程登录报错REMOTE HOST IDENTIFICATION HAS CHANGED!解决方式及原因

    注意,文档中的ip和指纹已经替换为了ip.ip.ip.ip 和aa:... ,以免引起不必要的误会. icode@test:~/lab/dir/sadf$ ssh remote_name@ip.ip. ...

  8. Linux转发性能评估与优化(转发瓶颈分析与解决方式)

    线速问题 非常多人对这个线速概念存在误解. 觉得所谓线速能力就是路由器/交换机就像一根网线一样. 而这,是不可能的.应该考虑到的一个概念就是延迟. 数据包进入路由器或者交换机,存在一个核心延迟操作,这 ...

  9. Uiautomator--出现报错“urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054,''>>”的解决方式!

    在运行uiautomator时,出现报错"urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054, ...

随机推荐

  1. [算法]滴滴笔试题——求最大子串和(O(n)复杂度)

    扫描法.一次扫描数组即可得出答案,复杂度O(n).这种方法用文字描述不容易说清楚,下面用每一步运算的图示来表达.伪代码如下: maxsofar=end=; ,n) end=max(end+x[i],) ...

  2. Python之两个列表一起打乱

    例子: import random c = list(zip(a, b)) random.shuffle(c) a[:], b[:] = zip(*c)

  3. 【BZOJ】1689: [Usaco2005 Open] Muddy roads 泥泞的路(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1689 一开始我也想到了贪心,,,策略是如果两个连续的水池的距离小于l的话,那么就将他们链接起来,,, ...

  4. 【POJ】1523 SPF(割点)

    http://poj.org/problem?id=1523 太弱... too weak.. 割点我都还要看书和看题解来写..果然是写不出么.. 割点就那样求,然后分量直接这个节点有多少子树就有子树 ...

  5. git chekout分支遇到问题:need merge

    解决步骤: 在master上, 1.git add . 2.git commit 3.新建分支,并且checkout到此分支,重新提交

  6. jhipster(springboot+datatable+jpa)后台分页,总结

    最近用datatable做了一个后台分页,但是后台实体原本没写DTO.就碰到的问题做了一下总结 一.datatable使用get方式传数据到后台,这是正常的后台分页,不涉及过滤查询和前端传递的排序字段 ...

  7. C++ map修改指定key的value

    对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢?  C++ Code  12345678910111213141516171819202122 ...

  8. python 发送email

    pyton smtplib发送邮件 在邮件中设置并获取到 smtp域名 在脚本中执行命名,收件人可以是 多个,在列表中 import smtplib from email.mime.text impo ...

  9. Amazon(vpc)对等网络

    对等连接测试 1.1 东京账户A创建对等连接 注意,双方的vpc网段不能重复,如果重复会造成无法配置路由表 输入双方信息 账户ID和VPC 1.2 东京账户A查看 查看连接信息 显示正在处理接受,需要 ...

  10. Java Web项目BlogAutoGenerator编写日志1

    使用的数据库是MySQL,所以首先要在MySQL中创建database和表.建立数据库article_db,建立表blog,如下: create database article_db DEFAULT ...