用WebSocket接收服务器数据并控制W…
来源:互联网 发布:php flash播放mp4 编辑:程序博客网 时间:2024/06/11 22:45
用WebSocket接收服务器数据并控制WebGL渲染的模型时发生UncaughtTypeError: Uncaught TypeError: Cannot read property 'rotation' ofundefined问题
这个问题一直令我头疼了很久。最终发现是渲染与websocket连接顺序的问题。
当websocket服务器打开,websocket页面client能够正常链接的时候,反倒会导致加载完的模型是个null,真是不太懂里面的基本原理。最开始的时候,我的websocket系列初始化和定义函数是写在最开头的:
function initThree() {
}
于是每次链接上服务器后,webGL能不能渲染出模型都得靠运气。一般第一个网页准失败,第二或者第三个才能正常运行。链接不上服务器的时候基本webGL都能渲染,可以确定是websocket和webgl协作的时候出了什么问题。之后调换了下顺序:
function threeStart() {
}
发觉还是老问题。百思不得其解。如果把render调换到newWebSocket的前面,的确可以运行,但是WebSocket罢工了,压根不运行。最终发现,render必须放在newWebSocket的后面,系列websocket定义函数的前面,也就是夹在之中
function threeStart() {
}
但……这并没有从根本上解决加载不上的问题:于是,最佳方式是判断加载完以后再来渲染render:
参考链接:loader.onLoadComplete=function(){scene.add( mesh)}
这样就顺利多了。但,还有个问题,浏览器不报错、也不显示
添加setTimeOut函数,将更改角度的函数塞进Js单线程执行队列里面:
var monkeyRotate=function(){
}
var render=function() {
}
WebSocket部分函数都塞到模型加载完以后运行:
loader2.onLoadComplete=function(){
}
这样处理后,谷歌浏览器中加载模型的成功率从60%提高到90%左右。
最终解决办法是把服务器端的发送消息标准化。由于发来的消息不仅仅包含double类型的传感器数据,还包含了hi howareyou这样的文字数据,当处理到文字数据的时候,javascript会发生类型转换错误,导致rotation属性丢失。解决后成功率100%
- 用WebSocket接收服务器数据并控制W…
- 连接服务器并接收数据
- html上面通过websocket接收二进制图片数据并显示在页面上
- C# 建立UDP服务器并接收客户端数据
- Go语言(服务器开发):客户端向服务器发送数据并接收返回数据
- UDP数据接收服务器
- VLC通过rtsp请求服务器,服务器接收rtp数据并转发
- VLC通过rtsp请求服务器,服务器接收rtp数据并转发
- VLC通过rtsp请求服务器,服务器接收rtp数据并转发
- QPython安装并测试WebSocket服务器ws4py
- CGI-Web服务器接收并显示数据 《Head First Python》第九章
- Android向node.js编写的服务器发送数据,并接收请求
- 用jstl在jsp接收后台传输数据并显示
- spark2.0 用socket接收数据并处理
- 浅析nodejs实现Websocket的数据接收与发送
- 浅析nodejs实现Websocket的数据接收与发送
- 前端如何接收 websocket 发送过来的实时数据
- android中通过GET方法接收数据并通过xml解析数据,POST方法向服务器提交数据
- LinkedList源码阅读
- CentOS给予port端口权限(搭建web…
- Spring入门学习——解决构造函数歧义
- 新浪博客分栏显示功能的测试
- Spring入门学习——指定Bean引用
- 用WebSocket接收服务器数据并控制W…
- Spring入门学习——为集合元素指定数据类型
- 添加button和onclicklistener后Att…
- Spring入门学习—— 一些概念
- 科学论文类型分类(letter, p…
- MySQL:索引工作原理
- Spring入门学习——使用Spring的FactoryBean创建Bean
- JavaScript之eval函数
- Three.js使用Blender导出json文件U…