【问题标题】:How to spawn 'dummy clients' on the server-side which use the server's interface in Flask/Socketio如何在 Flask/Socketio 中使用服务器接口的服务器端生成“虚拟客户端”
【发布时间】:2019-04-24 22:29:29
【问题描述】:

我有一个 Flask/SocketIO 应用程序,它目前将两个客户端配对在一起玩游戏。现在客户端正在通过一些已编译的客户端 Javascript 与服务器交互,我正在使用 socketio 来定义客户端调用的套接字,例如,当客户端向前移动时,movedForward。客户端 JS 类似地定义了服务器将发送到的 websocket,例如,当服务器将伙伴的动作传递给其他玩家时,partnerTurnedRight。

我想在服务器端创建可以与普通远程客户端交互的“虚拟”客户端——基本上,每次远程客户端连接时都会生成 Javascript 的 python 实现。这个想法是让服务器端“玩家”与远程人类客户端玩游戏。

我不确定如何实施这样的事情。我的直觉是我应该创建一个单独的 Flask/SocketIO 应用程序(不知何故),它为服务器发送的消息(例如,partnerTurnedRight)打开了套接字,并发出服务器期望的消息(例如,movedForward)。然后,当远程客户端连接时,生成一个有状态的子进程,该子进程具有自己的唯一 sid,并且能够使用与远程客户端完全相同的接口与服务器交互。但是,我真的不确定如何将所有内容放在一起或如何实际生成这样的服务器端客户端。

非常感谢您提供执行此类操作的示例项目、一些伪代码或如何设置此类操作的一般结构!

(部分问题是我不知道要使用什么搜索词,所以很难找到示例。)

【问题讨论】:

    标签: python flask socket.io


    【解决方案1】:

    您可以使用 python 在服务器端使用python-socketio 包。以下是客户端使用示例:

    import socketio
    
    sio = socketio.Client()
    
    @sio.on('connect')
    def on_connect():
        print('connected')
        sio.emit('Hello')
    
    @sio.on('event')
    def on_message(data):
        print('Received ', data)
    
    @sio.on('disconnect')
    def on_disconnect():
        print('disconnected')
    
    sio.connect('http://localhost:5000')
    sio.wait()
    

    【讨论】:

    • 谢谢,但我需要我的客户端在 python 中实现。我发现了一些似乎在 python 中实现客户端的 python 包/项目(例如,github.com/miguelgrinberg/python-socketio)——我认为这是正确的方向?
    • 是的,如果你必须使用 python,那是一个不错的选择。我会相应地调整我的答案。
    • 谢谢!我的客户端将是有状态的,当远程客户端连接时,我将生成它(例如,作为子进程)。因此,为了使其有状态,我假设我可以在此代码中包含 [1] 一些包含状态的全局变量,或者 [2] 将事件侦听器包装在一个类中?
    • 绝对@alsuhr
    • 是的,谢谢(使用 python-socketio 连接工作,但我还没有开始实现整个虚拟客户端),我会接受这个答案。
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 2013-05-13
    • 2014-10-31
    • 2018-01-01
    • 2021-03-25
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多