Windows-WAMP搭建与配置
GitHub 上获取源码
1. 打开个 3D 窗口
一个页面加载多个 TerraExplorer3DWindow 和 SGWorld 等只有第一个能用(即使用 iframe 也是一样)
所以我决定打开两个新页面实现多窗口对比,然后我在《主页面》使用 window.open 打开了两个《新页面》,但这两个新页面使用 SGWorld 时居然在主页面(使用 window.open 的页面)产生了效果,感觉和以前的一个页面加载多个 TerraExplorer3DWindow 和 SGWorld 效果一样了!!!
然后经过测试发现关闭主页面新页面就正常加载三维地图了。可以看出使用 window.open 时主页面和新页面是有关联的,我一开始试了很多方法都断不开这个关联,最后决定打开新页面时多打开一个主页面,然后关掉主页面这种笨方法。
当使用 window.close 当前关闭窗口,居然没有关上,我一搜发现了关闭前有这一行代码window.opener=null
opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。
opener 属性非常有用,创建的窗口可以引用创建它的窗口所定义的属性和函数。
断开主页面和新页面关联的方法找到了!!!
总结:
使用 window.open 打开两个窗口,然后设置 window.opener 为 null,这样就可以在不同窗口中打开三维场景了。
修正:
今天又测试一下设置 window.opener 为 null 不好使,还是使用将主页面关闭这种方法吧 =_=
2. 多个 3D 窗口同步
经测试使用 HTTP 协议通过 web 服务器进行多窗口联动(在页面摄像机参数改变时修改服务器的浏览器位置数据,所有页面每隔一定时间获取摄像机参数,当获取到的摄像机参数与当前三维场景摄像机参数的改变量大于阈值就更新当前三维场景摄像机参数),在每 500ms 同步一次的条件下不到一分钟 IE 浏览器就接收或发送 HTTP 请求就出现问题。然后经过调查资料使用长连接(WebSocket)技术可以处理这种高频访问并且多客户端通信的请求。使用 WebSocket 完成此功能只需三步即可:
- 客户端摄像机参数的改变发送给服务器,
- 服务器接收到请求后发送当前坐标给其他客户端,
- 客户端接收到消息后更新摄像机参数。
Node.js 后端代码
var express = require('express');
var http = require('http');
var WebSocket = require('ws');
var fs = require('fs');
var app = express();
var server = http.createServer(app);
var wss = new WebSocket.Server({server});
wss.on('connection', function connection(ws) {// 创建连接
console.log('链接成功!');
ws.on('message', function incoming(data) {// 接收消息
wss.clients.forEach(function each(client) {
/*
给全部客户端(创建连接的客户端)中
除了发送者客户端(本次发送给服务器消息的客户端)的其他客户端发送消息
*/
if (client != ws) {client.send(data)}
});
});
});
// 启动WebSocket
server.listen(18848, function listening() {
console.log('服务器启动成功!');
});
前端主要 js 代码:
import update_pos from './update_pos'
export default function(){
// ws
this.wsServer = new WebSocket(this.ws_url);
this.wsServer.onopen = function (e) {
(typeof e == 'string') && this.send(e);//向后台发送数据
};
this.wsServer.onclose = function (e) {//当链接关闭的时候触发
};
this.wsServer.onmessage = function (e) {//后台返回消息的时候触发
// console.log('get_sync_info')
// console.log(data)
var sync_info = JSON.parse(e.data).sync_info
var pos_arr = sync_info.pos
var pos = SGWorld.Creator.CreatePosition(pos_arr[0], pos_arr[1], pos_arr[2], pos_arr[3], pos_arr[4], pos_arr[5]);
SGWorld.Navigate.SetPosition(pos);
};
this.wsServer.onerror = function (e) {//错误情况触发
}
// 定时更新位置
this.last_pos = {};
this.sync_interval = setInterval(update_pos.bind(this), this.interval)
}
Windows-WAMP搭建与配置的更多相关文章
- windows下搭建及配置mantis缺陷管理工具
在windows XP 操作系统下,如何更快.更容易地搭建及配置mantis缺陷管理工具呢?以下是我实践的具体步骤: 一.安装mantis的前提环境,需要先安装Apache HTTP Server2. ...
- 【小白的java成长系列】——windows下搭建和配置java环境
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/enson16855/article/details/25967851 基于非常多原因,还是得说说ja ...
- centos6.5环境搭建openvp服务器及windows客户端搭建及配置详解
1.环境搭建 说明: vpn client 192.168.8.16/24 openvpn server: eth0: 192.168.8.41 eth1: 172.16.1.10 app serve ...
- WAMP搭建与配置
使用WampServer整合软件包进行WAMP环境搭建 WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以及MySQL数据库的整合软件包.免去了开发人员将时间花费在繁琐 ...
- 史上最全Windows版本搭建安装React Native环境配置
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
- 史上最详细Windows版本搭建安装React Native环境配置 转载,比官网的靠谱亲测可用
史上最详细Windows版本搭建安装React Native环境配置 2016/01/29 | React Native技术文章 | Sky丶清| 95条评论 | 33530 views ...
- wnmp(windows+nginx+mysql+php)环境搭建和配置
要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); nginx-1.4.7;MySQL Server 5.5php-5.4.39-nts 下载地址 环境下载 Nginx是 ...
- Go(02)windows环境搭建和vscode配置
之前讲述过linux环境下Go语言开发环境搭建,这次简述下windows的搭建以及vscode配置 windows环境搭建 同样去https://studygolang.com/dl下载windows ...
- 史上最详细Windows版本搭建安装React Native环境配置
说在前面的话: 感谢同事金晓冰倾情奉献本环境搭建教程 之前我们已经讲解了React Native的OS X系统的环境搭建以及配置,鉴于各大群里有很多人反应在Windows环境搭建出现各种问题,今天就特 ...
- 01.WAMP搭建 [Win7+Apache2.4+MySQL5.7+PHP7
WAMP搭建[Win7+Apache2.4+MySQL5.7+PHP7 一.背景 将电脑光驱位拆换成固态硬盘(120g),专门装了一个系统用于工作.之前一直使用PHPstudy和WAMP这种集成环境, ...
随机推荐
- Linux:主设备号和次设备号
http://www.linuxidc.com/Linux/2011-03/33863.htm Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备 ...
- (三)修改内核大小,适配目标板Nand flash分区配置
一. 修改内核大小 1. 在你的配置文件下uboot/include/config/xxx.h 里面有一个宏定义 #define MTDPARTS_DEFAULT "mtdparts=jz2 ...
- php读取excel(支持03,07)
需要用到PHPExcel这个类 附上代码 //phpExcel读取excel内容 header("Content-Type:textml;charset=utf-8"); //引用 ...
- 用 Flask 来写个轻博客 (36) — 使用 Flask-RESTful 来构建 RESTful API 之五
目录 目录 前文列表 PUT 请求 DELETE 请求 测试 对一条已经存在的 posts 记录进行 update 操作 删除一条记录 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 ...
- leetcode-解题记录 557. 反转字符串中的单词 III
题目: 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出 ...
- oo前三次作业博客总结
第一次作业 实现多项式的加减运算,主要问题是解决输入格式的判断问题. 输入实例: {(3,0), (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...
- CSL 的密码(后缀数组)
CSL 的密码 题目传送门 解题思路 后缀数组.对于每一个后缀\(k\)都有\(n - k + 1\)个前缀,把所有不和前一个(排序后的)公共且长度大于\(m\)的前缀个数加起来. 代码如下 #inc ...
- PAT 2019-3 7-4 Structure of a Binary Tree
Description: Suppose that all the keys in a binary tree are distinct positive integers. Given the po ...
- Python中的装饰器,迭代器,生成器
1. 装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的 ...
- VLAN基础配置及Access接口 实验1
1.Access接口 是交换机上与PC机上相连的端口 2.当主机向交换机发送数据帧时,经过的Access口会将该帧加一个与自己PVID一致的VLAN标签 当交换机的Access口要发送给PC机一个带有 ...