WebSocket 跨域问题解决

2018-07-30 11:12:15 +08:00
 jonychen1

WebSocket protocol 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是 server push 技术的一种很好的实现。我们使用 Socket.io ,它很好地封装了 webSocket 接口,提供了更简单、灵活的接口,也对不支持 webSocket 的浏览器提供了向下兼容。 项目中遇到 javascript 跨域问题,父页面和子页面要通信,并且父子页面跨域,怎么办? 项目中要保证父子页面通信是点对点,需要在服务端建立对父子页面 WebSocket 的对应关系,即父页面发的消息只被子页面收到,子页面的消息也只被父页面收到我们做了以下工作,严格保证了 WebSocket 通信是点对点:    一是建立 WebSocket 链接的 URL 加上时间戳保证通信会话是唯一的; 二是在服务端保证父子页面 WebSocket 一一对应关系。父子页面的 WebSocket 在 Open 时都会向服务端发出消息进行注册,建立 Senssion 之间的对应关系。然后父子页面就可通过双方约束的通信协议进行通信了。 这里我们写个 demo: var p = document.getElementsByTagName(‘ p ’)[0]; var io = io.connect(‘ http://127.0.0.1:3001 ’); io.on(‘ data ’,function(data){ alert(‘ 2S 后改变数据’); p.innerHTML = data });

服务器端 var io = require(‘ socket.io ’)(server); io.on(‘ connection ’,function(client){ client.emit(‘ data ’,’ hello WebSocket from 3001.’); }); 今天就说到这里,希望对大家有所帮助,同时大家如果不想太花时间去做 WebSocket 这块,可以尝试使用三方 WebSocket,类似 GoEasy 极光之类的。 这里推荐 GoEasy,简单易用 www.goeasy.io 还是免费的,可以尝试一下。

1460 次点击
所在节点    问与答
0 条回复

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

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

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

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

© 2021 V2EX