Tag: html5

在node.js多人游戏html5游戏中越来越高的延迟

我使用node.js创build了一个网页,表示js,socket.io和jquery。 这是一个简单的游戏,玩家join,给自己一个名字,然后在页面上的一个canvas上移动自己(一个正方形)。 我注意到的是:当有更多的人join游戏并且四处走动的时候,有足够的时间让游戏变得无法玩(只有三个人连接在一起,两个人并没有太大的差距)。 我无法弄清楚这是服务器端延迟还是客户端(这是我第一个处理多人游戏的项目)。 我正在做服务器上的所有位置计算,并将所有玩家对象的数组发送回每个套接字,以便每个客户端可以渲染所有玩家。 客户端只发送input并绘制玩家。 这是游戏的客户端脚本。 这是我处理input和渲染的地方。 $(document).ready(function() { var socket = io.connect(); var canvas = document.getElementById("canvas_html"); var ctx = canvas.getContext("2d"); canvas.width = 512; canvas.height = 480; document.body.appendChild(canvas); var player = { id: '', is_it: false, x: canvas.width / 2, y: canvas.height / 2, velx: 0, vely: 0 } //tell the server to initialize […]

NODEJS实时游戏数据传输

为了练习我正在尝试开发一个多人游戏。 我使用NODEJS和HTML5canvas。 在客户端和服务器之间共享数据我使用的是Socket.io 我想知道的是如何优化客户端 – 服务器数据传输。 信息 玩家一直在移动,我必须每1000/60 ms(60 fps)更新玩家位置。 玩家动作: vecX = mouse.x – player.x; vecY = mouse.y – player.y; vec = Math.sqrt(vecX*vecX + vecY*vecY); dx = vecX/vec; dy = vecY/vec; player.x += dx*player.speed; player.y += dy*player.speed; 我试过了吗? 第一次尝试: 客户端将鼠标位置发送到每个鼠标移动的服务器。 服务器保存鼠标位置 服务器每1000/60 ms刷新玩家位置(每个玩家鼠标位置),并将其检索给每个在其屏幕上具有位置的玩家(屏幕只显示地图的一部分)。 – >问题:滞后很多。 第二次尝试: 客户端将dx和dy发送到服务器以进行每次鼠标移动(而不是鼠标位置)。 服务器检索这个dx和dy给每个玩家。 客户端通过dx和dy移动每个玩家。 服务器通过dx和dy移动每个播放器(只刷新服务器端数据)。 服务器每100毫秒检索一次玩家的位置(纠正位置)。 – >问题:数据不同步

在NodeJS中使用mp3文件以用于audio标签

我在使用NodeJS中的mp3文件时遇到问题。 var filestream = fs.createReadStream('file.mp3'); filestream.on('open', function() { var stats = fs.statSync('file.mp3'); var fileSizeInBytes = stats["size"]; response.writeHead(200, { 'Content-Type': 'audio/mpeg', 'Content-Length': fileSizeInBytes}); filestream.pipe(response); }); 我在设置文件的内容types之前,他们被提供,和内容的长度。 当我在页面上有文件时,我可以播放audio并获取内容的持续时间,这是当前时间。 但是当我不使用NodeJS来提供mp3文件时,我无法设置当前时间。 <audio id='player' src='file.mp3'></audio> <script> var duration = player.duration; // 88 seconds var time = player.currentTime; // 0 seconds player.currentTime = 10; var time = player.currentTime; // 0 seconds […]

浏览器数据库可以在其他设备之间同步?

我正在开发一个Web应用程序,我想添加function,使用户可以在离线时使用它(应用程序caching)。 我正在寻找一种工具,可以在离线设备之间同步浏览器的数据库(IndexedDB),然后在互联网访问返回时与MySQL同步。 PouchDB具有这种function。 每个设备都有多个PouchDB,您可以在每个PouchDB和CouchDB之间进行双向复制(同步)。 但是我需要MySQL支持。

使用fs.ReadStream来移动文件

我有一个问题注册。 使用节点移动文件。 最后 – 我有一个本地文件在M盘(映射),并要移动/复制到N驱动器。 使用fsStream我可以在本地移动它,但是我担心一旦我把它放到一个网站上,由于文件操作它会如何反应。 我很好奇,如果任何人有任何解决scheme – 我原来是使用File API,这是很漂亮,但我注意到它可以做的只是加载数据,我无法'保存'在任何地方。 脚本非常简单 – 大多数情况下,我将使用variables将写入/读取分配给path。 我正在努力寻找如何从服务器写到PC的信息,只是很多原因,因为违反行为不能完成。 我的其他select可能只是使用Powershell脚本? var fs = require('fs'), util = require('util'); var origFile = '~origPath~' var destFile = '~destPath' var is = fs.createReadStream(origFile) var os = fs.createWriteStream(destFile); util.pump(is, os, function() { fs.unlinkSync(origFile); }); 提前感谢。 对不起,如果我的post缺乏必要的细节。 一旦我知道,我会编辑。

RTS HTML5游戏多人游戏 – 启动node.js服务器游戏

我用HTML5制作了一个RTS游戏( 带有create.js ), 并且想用node.js添加多人游戏部分。 我可以将html和javascript文件转换为.exe,以使用Web2ExeWin-v0.4.2b作为“正常”应用程序运行游戏 我研究了node.js并启动了一些简单的服务器。 概念:用户打开游戏,可以启动单人游戏(无需服务器)或用户启动多人游戏,可以邀请朋友到大厅。 之后,他可以开始多人游戏。 正常的rts游戏。 想法:要启动服务器游戏,我必须执行“node server.js”命令。 现在用户将join他的服务器,并可以将数据发送给其他游戏用户join游戏。 问题:这个想法出了什么问题? 我无法运行用户的cmd命令来打开节点服务器,因为它在javascript中。 什么是在JavaScript中实现node.js多人部分的正常方式,以便每个用户可以创build自己的游戏服务器?

Nodejs – 使电子邮件模板dynamic

我正在开发项目在平均堆栈中,我需要在我的应用程序发送很多电子邮件。 我已经将电子邮件模板作为单独的所有电子邮件模板,但我想在电子邮件模板中制作通用的页眉和页脚。 Route.js router .route('/api/user/register') .post( //for get email template var fs = require("fs"); var message = fs.readFileSync(basePath + "app/client/views/layout/registerEmailTemplate.html").toString(); ……. ); router .route('/api/user/forgotpassword') .post( //for get email template var fs = require("fs"); var message = fs.readFileSync(basePath + "app/client/views/layout/resetPasswordEmailTemplate.html").toString(); ……. ); router .route('/api/user/accountActivation') .post( //for get email template var fs = require("fs"); var message = […]

HTML5 <a>在JavaScript下载属性不处理服务器错误

我试图以编程方式单击具有下载属性和href下载文件从服务器的<a>元素。 但是,如果下载出错,服务器将返回一个错误状态代码的HTML页面。 由于HTML5下载属性,它会尝试强制下载此html页面或下载服务器错误文件。 有没有办法,我可以打开一个新的标签,而不是下载的HTML错误文件? 我已经将target属性设置为_blank。

Html5canvas“复合层”导致长帧

我有一个运行在网页上的javascript客户端,使用requestAnimationFrame绘制到canvas,并通过websockets与我的NodeJS后端服务器(使用服务器端的'ws'模块)进行通信。 通过使用Chrome开发工具进行分析,似乎脚本,渲染和绘制每个帧的时间合计最多只有几毫秒。 然而,从20 – 40ms仍然有很长的框架。 时间表显示,几乎在所有这些情况下,都有一个超过框架长度的“响应”和/或最终发生的“复合层” 。 这基本上是我如何使用requestAnimationFrame : function drawGame() { // Drawing to gameCanvas from cacheCanvas // cacheCanvas is updated whenever an update is received from the server ctx.drawImage(cacheCanvas, // source rectangle 0, 0, gameCanvas.width*2, gameCanvas.height*2, // destination 100, 100, gameCanvas.width*2, gameCanvas.height*2 ); requestAnimationFrame(drawGame); } requestAnimationFrame(drawGame); 服务器在60hz使用setInterval()发送更新。 当从服务器收到消息时,客户端立即绘制它。 我怀疑这个时间与requestAnimationFrame结合可能是不正确的,并导致框架结尾的复合层。 即便如此,我仍然对为什么在每一帧的脚本和“复合层”之间有太多的空闲时间感到困惑。 所以… 有什么办法来控制什么时候“复合层”被称为? 我应该保存每个更新消息中的数据,并且只在下一个animation帧的开头绘制它? […]

如何在JavaScript中保存需要客户端处理的大文件

我正在做一个简单的file upload与端到端的encryption。 我有上传/encryption,但我不知道如何保存较大的文件,而不会导致内存过载。 比方说,例如我有一个2GB的文件,我会解密它,例如1kb的块。 但是,一旦我有所有这些块(无论是缓冲区还是斑点),我怎样才能将它们保存在stream本地? 我find了 var json = JSON.stringify(data), blob = new Blob([json], {type: "octet/stream"}), url = window.URL.createObjectURL(blob); a.href = url; a.download = fileName; a.click(); window.URL.revokeObjectURL(url); 但是对于大文件,我认为这会导致浏览器崩溃。 编辑:我发现这个说的blob的内存限制,如果500MiB,这肯定是太低了。 我在这里有什么select吗?