gpt4 book ai didi

python - 无法在 python 中将数据发送到特定的 websocket 客户端

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:17 24 4
gpt4 key购买 nike

我正在用 python 编写一个带有 websockets 的程序。我已经运行了一个示例服务器和客户端代码,如果只有一个客户端连接,它们就可以很好地工作。如果有多个客户端,来自服务器的数据将随机发送到其中一个客户端。

我想要:

  1. 用于跟踪连接的各个客户端的服务器
  2. 服务器能够将消息定向到多个(例如 5 个)客户端中的特定客户端

websockets 是我正在使用的库。Python版本3.7.2

服务器代码:

import asyncio
import websockets

uri='localhost'


async def response(websocket, path):

msg = input("What do you want to send : ")
print("message:",msg)
await websocket.send(msg)

start_server = websockets.serve(response, uri, 5000)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

客户端代码:

import asyncio
import websockets

uri="ws://localhost:5000"
async def message():

async with websockets.connect(uri) as socket:
print(await socket.recv())

while True:
asyncio.get_event_loop().run_until_complete(message())

如果我使用客户端代码创建 2 个文件作为 client1.py 和 client2.py,并从服务器端发送消息,我会将发送的数据发送到任一客户端。

我愿意:

  1. 服务器跟踪连接的各个客户端
  2. 服务器能够将消息定向到多个客户端中的特定客户端

由于我刚刚开始使用 websockets,因此欢迎所有输入。

In this output given, I intended to send all my messages to client 1, yet they got split up between client 1 and 2

最佳答案

websocket”以当前连接为目标,如果您说“websocket.send(msg)”,您将向刚刚连接的客户端发送一条消息,并且 websocket 是一个可重用的对象当客户端连接时。您可以将 websocket 分配为变量,然后只要连接仍然打开,就可以在其他时间发送消息。

不推荐

要求服务器提供用户输入并不是一个好主意,因为现在您正在等待服务器直到它收到用户输入。在等待用户输入时,服务器实际上没有发生任何事情,这可能会破坏您的服务器。

推荐

客户端必须告诉服务器将消息发送到哪个连接/客户端。我建议在客户端和服务器内发送消息时使用 JSON 格式,然后将字符串转换为 python-dict,因为 websocket 仅需要字符串。

Click here查看我的 GitHub 存储库。仅使用 Python 编写的 Websockets 服务器。

服务器示例

Example on how you can send a packet to a specific client

关于python - 无法在 python 中将数据发送到特定的 websocket 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60305739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com