【问题标题】:Socket.IO Fake a socketSocket.IO 伪造一个套接字
【发布时间】:2015-07-23 20:41:06
【问题描述】:

背景:我正在使用完整的 Express、http.Server 和 Socket.IO 来制作游戏。当每个人连接时,他们都有一个套接字会话,我使用它在服务器和客户端之间发送信息。

我现在想做的是将 AI 添加到我的游戏中,因为玩家人数最少,而 AI 会使体验更加丰富。但是,我不知道如何假装每个 AI 玩家都在插座的另一端。有没有一种方法可以让我做类似 'var fakeSocket = new Socket(...)' 的事情?

【问题讨论】:

    标签: express socket.io


    【解决方案1】:

    您还可以使用“socket.io-client”打开从服务器到服务器的客户端连接

    var clientIo = require('socket.io-client');
    var socket = clientIo.connect(...);
    

    然后像普通套接字一样使用它来将新玩家添加到游戏中。

    【讨论】:

    • 感谢您的帮助!我只有一个问题:我应该将什么传递给 connect() 调用?我现在正在尝试“localhost:3000”,但它看起来不像我的 AI 正在连接。
    • 我用过 var socket = clientIo.connect("http://"+node.ip+":"+node.port);然后 socket.on("connect", function() { ...
    • 我找到了我需要的东西:clientIo.connect('localhost:3000') 供将来参考,你的代码中的节点是什么?
    • 只是内部变量,node.ip = and node.port =
    【解决方案2】:

    您的 AI 播放器可以在您的服务器上运行,并且只需通过 webSocket 连接连接到服务器(在同一个盒子上)。您的服务器甚至不需要知道他们是 AI 玩家还是真实玩家。就服务器而言,它们是来自某个地方的 webSocket 连接(碰巧它们中的一些来自同一个盒子而不是远程浏览器)。通过这种方式,服务器不需要对 AI 玩家采取与普通玩家不同的处理方式(除非您选择为每个玩家调用不同的逻辑来偏爱对方)。

    所以,没有必要使用假套接字。您可以更轻松地使用真正的 webSocket 连接,然后不需要伪装套接字。

    有关如何从您的服务器创建 socket.io 连接,请参阅其他问题/答案:

    Is it possible to set up a socket.io client running (server-side) on a node.js server?

    总之,您使用socket.io-client 模块:

    var io = require('socket.io-client');
    

    然后,像在浏览器客户端中一样使用 io 变量。

    【讨论】:

    • 这就是我所希望的。在那种情况下,我怎样才能让一些 JS 对象创建一个真正的 Socket 连接?示例的方式是,客户端调用 io() 但我不确定如何为 AI 对象设置它。
    • @nectarsac - 查看我在答案末尾添加的内容,了解如何从服务器创建 socket.io 连接。
    • 感谢您的帮助!最后一件事。我正在使用 connect('localhost:3000') 但它没有保护连接。这有什么问题?
    • @nectarsac - 您必须显示您使用的特定代码的更多详细信息,以便我知道出了什么问题。 socket.io 客户端文档显示:var socket = io('http://localhost'); 或:var socket = io('http://localhost:3000');。换句话说,它应该是一个实际的 URL。
    • 问题是 'localhost:3000' 未被接受,但 'localhost:3000' 被允许,所以谢谢你的一切!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多