在回调之外按需发送 websocket 消息?
Posted
技术标签:
【中文标题】在回调之外按需发送 websocket 消息?【英文标题】:Send websocket messages on demand, outside of callbacks? 【发布时间】:2016-03-01 18:47:10 【问题描述】:我有一个用 Python 编写的玩具视频游戏引擎的后端。它在我的服务器上以连续的游戏循环运行。我希望它能够通过 websockets 向网络浏览器客户端发送消息。
但是,在我看来,websockets 普遍仅限于仅发送回调信息。我尝试使用 Python 的 Autobahn websockets 库,但是当服务器运行时,它运行在一个阻塞循环中,所以你甚至不能与它交互——你只能在回调中提前定义它的行为。
我只想能够实例化一种 MyWebsocketNetwork,它将在后台运行其服务器,并能够在我的代码中的任何位置调用 myWebsocketNetwork.sendToAll("my message") 以按需发送我的消息。不在回调中,而是在需要时。同样,我找不到使用 Autobahn(或任何其他库)执行此操作的方法,因为它们都在阻塞 lops 中运行。
由于 websocket 的性质,这通常是不可能的吗?或者有什么方法可以让我在 Python 中按需向我的客户发送 websocket 消息(按需 = 动态和有条件地基于我的游戏循环中发生的事情)。
【问题讨论】:
【参考方案1】:我不确定我理解你的意思。回调是按需的。听起来您需要在单独的线程中创建 WebSocket。
【讨论】:
这是高速公路特有的,但这是我的问题:我创建了我的客户端,在其中我定义了 onMessage、onConnect 等的行为方式。我以相同的方式定义我的服务器。它们每个都进入一个 asyncio 循环,然后是 loop.run_forever()。所以他们的行为只是预定义的——我如何在外部说“我想任意发送这个消息到服务器,而不是从回调中,而是从拥有这个客户端的外部游戏引擎?” 我对高速公路不太熟悉,但只是想以防万一它对您有所帮助...如果您在 asyncio 循环之外引用了 WebSocket,为什么不能仅仅-ws-reference.send("给客户的东西") ?以上是关于在回调之外按需发送 websocket 消息?的主要内容,如果未能解决你的问题,请参考以下文章
使用原始 WebSocket 时如何知道消息是不是已成功发送?
使用Spring STOMP websockets向单个人发送消息