与python的简单异步双向通信

与python的简单异步双向通信,python,sockets,networking,python-sockets,python-socketio,Python,Sockets,Networking,Python Sockets,Python Socketio,我正在创建一个应用程序,其中键盘事件应该从服务器发送到客户端,而客户端的键盘事件应该发送回服务器。我曾尝试实现pythonsocket.io,但它似乎不起作用。我想在键盘事件触发某个函数时从一台机器向另一台机器发送消息,然后在一台机器收到另一台机器的消息时运行回调 我目前有这个服务器/客户机代码,客户机连接,但当我从另一个文件调用sendMsg函数时,它打印出sending,但我认为消息实际上没有发送,因为客户机上没有收到任何消息 服务器: from aiohttp import web imp

我正在创建一个应用程序,其中键盘事件应该从服务器发送到客户端,而客户端的键盘事件应该发送回服务器。我曾尝试实现pythonsocket.io,但它似乎不起作用。我想在键盘事件触发某个函数时从一台机器向另一台机器发送消息,然后在一台机器收到另一台机器的消息时运行回调

我目前有这个服务器/客户机代码,客户机连接,但当我从另一个文件调用sendMsg函数时,它打印出sending,但我认为消息实际上没有发送,因为客户机上没有收到任何消息

服务器:

from aiohttp import web
import socketio
import keylogger
import controller
import threading

sio = socketio.AsyncServer()
app = web.Application()
sio.attach(app)

async def sendMsg(msg):    
    print("sending")
    await sio.emit("response",msg)

async def index(request):
    with open('index.html') as f:
        return web.Response(text=f.read(), content_type='text/html')

@sio.event
def connect(sid, environ):
    print('connect ', sid)
    #start keylogger and controller
    threading.Thread(target=keylogger.listen,daemon=True).start()
    controller.init()
    sio.emit("response","ready")

@sio.event
def disconnect(sid):
    print('disconnect ', sid)
    keylogger.stop()
    print("Client is disconnected, please restart server/client connection")

@sio.on('message')
async def print_message(sid, message):
    print("Socket ID: " , sid)
    print(message)
    await sio.emit("response","test")

app.router.add_get('/', index)
if __name__ == '__main__':
    print("starting server")
    web.run_app(app)

客户:

import time
import socketio

sio = socketio.Client()


@sio.event
def connect():
    print('connected to server')
    sio.emit("message","connected")


@sio.event
def response(data):
    print('res rec', data)
@sio.on("letter")
def letter(data):
    print(data)


if __name__ == '__main__':
    sio.connect('http://localhost:8080')
    sio.wait()
如果有更好/更简单的方法,请使用不同的方法让我知道