Python-单向websocket

Python-单向websocket,python,python-3.x,websocket,server-sent-events,Python,Python 3.x,Websocket,Server Sent Events,我试图在客户端和服务器之间创建一个单向websocket连接(python)。我目前使用的原型库是WebSocket和simplesocketserver。我有一个从服务器到客户机的hello world示例,但是我需要能够从后端向客户机发送数据,而不需要从客户机中提取数据。所有WebSocket示例似乎都显示了服务器在侦听客户机,然后进行响应 到目前为止,我已经尝试: 使用websockets 8.0,将数据从服务器发送到客户端时不需要付费,但这只适用于硬编码字符串,我不明白如何在客户端不需

我试图在客户端和服务器之间创建一个单向websocket连接(python)。我目前使用的原型库是WebSocket和simplesocketserver。我有一个从服务器到客户机的hello world示例,但是我需要能够从后端向客户机发送数据,而不需要从客户机中提取数据。所有WebSocket示例似乎都显示了服务器在侦听客户机,然后进行响应

到目前为止,我已经尝试:

  • 使用websockets 8.0,将数据从服务器发送到客户端时不需要付费,但这只适用于硬编码字符串,我不明白如何在客户端不需要付费的情况下按需发送真实数据

  • 以同样的方式使用simplesocketserver

  • 已开始调查服务器发送的事件-这是否更合适
websockets文档中的示例:


import asyncio
import websockets

async def hello(websocket, path):
    name = await websocket.recv()
    print(f"< {name}")

    greeting = f"Hello {name}!"

    await websocket.send(greeting)
    print(f"> {greeting}")

start_server = websockets.serve(hello, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

导入异步
导入WebSocket
异步def hello(websocket,路径):
name=wait websocket.recv()
打印(f“<{name}”)
问候语=f“你好{name}!”
等待websocket。发送(问候语)
打印(f“>{问候语}”)
start_server=websockets.service(你好,“localhost”,8765)
asyncio.get_event_loop()。运行_直到完成(启动服务器)
asyncio.get_event_loop().永远运行_()
注:单向通信的需要是由于现有的体系结构


任何关于这方面的指导或资源都会很好,我希望我忽略了一些简单的东西。谢谢大家!

我遇到了类似的问题。经过一些尝试和错误,我找到了一个适合我的解决方案,也许它也适合你。我已经在Linux、Firefox和mobile Safari(并行)上对此进行了测试

inputhread
等待命令行上的输入(单词)并将它们写入列表,每当追加新字符串或连接客户端时,列表将发送给所有连接的客户端

致以最良好的祝愿, 菲利普


代码片段

导入异步IO
导入WebSocket
导入json
从线程导入线程
单词=[]
客户=[]
异步def寄存器_客户端(websocket,路径):
#在列表中注册新客户端并保持连接打开
clients.append(websocket)
等待发送给所有客户端()
尽管如此:
等待异步睡眠(10)
异步def发送到所有客户端():
全球词汇
对于i,列表中的ws(枚举(客户端))[::-1]:
尝试:
wait ws.send(json.dumps({“words”:words}))
除websockets.exceptions.ConnectionClosedError外:
#如果连接关闭,请将其拆下
del客户[i]
类InputThread(线程):
def运行(自):
全球词汇
异步def发送_循环():
尽管如此:
i=输入()
如果不是i.strip():
持续
附加({“选项”:i.strip().slit()})
等待发送给所有客户端()
asyncio.run(发送\u循环())
InputThread().start()
asyncio.get_event_loop()。运行_直到完成(
websockets.service(注册客户端,“localhost”,8765))
asyncio.get_event_loop().永远运行_()

我遇到了一个类似的问题。经过一些尝试和错误,我找到了一个适合我的解决方案,也许它也适合你。我已经在Linux、Firefox和mobile Safari(并行)上对此进行了测试

inputhread
等待命令行上的输入(单词)并将它们写入列表,每当追加新字符串或连接客户端时,列表将发送给所有连接的客户端

致以最良好的祝愿, 菲利普


代码片段

导入异步IO
导入WebSocket
导入json
从线程导入线程
单词=[]
客户=[]
异步def寄存器_客户端(websocket,路径):
#在列表中注册新客户端并保持连接打开
clients.append(websocket)
等待发送给所有客户端()
尽管如此:
等待异步睡眠(10)
异步def发送到所有客户端():
全球词汇
对于i,列表中的ws(枚举(客户端))[::-1]:
尝试:
wait ws.send(json.dumps({“words”:words}))
除websockets.exceptions.ConnectionClosedError外:
#如果连接关闭,请将其拆下
del客户[i]
类InputThread(线程):
def运行(自):
全球词汇
异步def发送_循环():
尽管如此:
i=输入()
如果不是i.strip():
持续
附加({“选项”:i.strip().slit()})
等待发送给所有客户端()
asyncio.run(发送\u循环())
InputThread().start()
asyncio.get_event_loop()。运行_直到完成(
websockets.service(注册客户端,“localhost”,8765))
asyncio.get_event_loop().永远运行_()