我正在使用node.js在点击HTML元素时生成子进程(恰好是一个视频游戏)。当然,客户端和服务器应该在同一台机器上。当我现在这样做时,游戏会打开,但当然所有键盘按下都会进入浏览器,而不是在产生时打开的全屏游戏。
如何将所有键盘按键从客户端路由到子进程(游戏)?
我唯一的想法是让客户端监听按键,然后将它们(通过Socket.IO之类的东西)传递给节点,而节点又会将这些按键发送给孩子。我担心这会导致按键和游戏之间的延迟。此外,我甚至不确定如何首先将实际的按键发送到子进程。
- 这就是我如何产生这个过程 -
var spawn = require('child_process').spawn;
var prc = spawn('gameinquestion', ['-v']);
答案 0 :(得分:0)
这个想法:
keydown
事件然而,对于你正在做的事情(玩游戏),你可能想要完全破坏Node并获得类似http://badassjs.com/post/711624134/novnc-a-vnc-viewer-in-javascript(纯JS中的VNC客户端)的东西。
有关延迟的更多信息
如果你一个接一个地传达击键,你需要担心的是,一些稍后会发射的请求实际上会更快到达(有时很少,有时会很多)。这可能会也可能不会更改单独请求命中节点服务器的顺序。如果你一个接一个地传递击键,你总是想要做的是让Node发回一个“收到的最后击键”的唯一ID,以便客户知道它在哪一个......或者拥有客户端记录它收到的击键次数,发送当前发送的所有击键,并让服务器重新构建订单。
第二个选项是数据包解决方案 - 您可以将它们聚集在x keystrokes
或x milliseconds' worth of keystrokes
中,而不是发送一次击键。第一个是好的,如果你打字很多,因为更新会更快,但如果你打字很少,会更糟。第二个很好,因为你知道你最多会被x
推迟。然而,这很糟糕,因为你知道你必须依靠侥幸延迟少于x
。
此外,即使在#2的情况下,除非你选择一个愚蠢的大包装框架,否则你需要实施解决方案#1。