node.js - 使用 Express Websocket Ping 改进节点?
问题描述
我正在开发一款游戏,您可以在电视上扫描二维码,它将控制器加载到手机上并通过 websocket 传递玩家操作。从功能上讲,它只是将范围滑块的值传递给 TV 以表示玩家的 Y 轴坐标。
我遇到了响应时间不太好的问题。动作和反应之间大约有 200 毫秒的延迟。
我正在使用带有 express 的 node 和 socket.io 库。我在使用一键式 node.js 安装的预算 Digital Ocean 服务器上,并且已经将该区域设置为尽可能靠近我的物理位置。
虽然由于分配的性质我无法分享实际链接,但代码处理通信如下:
应用程序.js:
var server = require('http').Server(app);
var io = require('socket.io')(server, { wsEngine: 'ws' });
app.use(function(req, res, next){
res.io = io;
next();
});
app.get('/move/:id/:pos', function(req, res, next) {
res.io.emit("move", {id: req.params.id, pos: req.params.pos});
res.send('move player');
});
控件.js:
function connectSocket(){
//Browser compatibility check
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
req = new XMLHttpRequest();
}
function startGame(){
connectSocket();
req.open("GET", "start/"+myID, true);
req.send(null);
controlLoop = setInterval(function(){
movePlayer(mySlider.value);
}, 20);
}
let lastPos = 0;
function movePlayer(myPos){
if(myPos != lastPos){
req.open("GET", "move/" + myID + "/" + myPos, true);
req.send(null);
}
lastPos = myPos;
}
游戏玩法.js:
socket.on('move', function(data){
if(data.id == myID){
myPlayer.style.top = (data.pos/100)*(window.outerHeight - 300) + 'px';
}
});
任何有关如何加快响应时间的帮助将不胜感激!这是我对 websockets 的第一次实验,需要低 ping 可能已经咬得比我能咀嚼的更多:)
解决方案
我不知道每个调用都需要自己的 XMLHttp 请求,使用的是全局请求 - 感谢 jfriend00 的指导!
推荐阅读
- c# - Microsoft Graph API query involving externalUserState C#
- regex - 无法为不同的 URL 创建正则表达式
- vb.net - 应用程序不会在调试模式下启动
- python - Odoo 10 - 带有 onChange() 装饰器的函数和新对象
- sql - 获取日期函数
- xamarin.forms - 带有 Xamarin 表单的 MobileFirst 7.1
- linux - “conda init”阻止 anaconda-navigator 在除基本环境之外的所有环境中工作
- android - 有没有办法在 ExoPlayer 中知道正在播放的 IMA 广告是前贴片广告、中贴片广告还是后贴片广告?
- c# - 如何在 .NET 中通过 ssh 连接实现发送和接收 hl7 数据
- haskell - Haskell 中的匿名函数类型