Python——我正试图在等待TCP流量的同时运行一个主逻辑(游戏服务器)循环



我现在有一个脚本,它使用asyncio在TCP端口上侦听任何传入连接,如果接收到连接,它会解析数据并为接收到的数据设置一个类变量。

这非常适合等待传入连接,但我不知道如何在等待传入连接的同时运行循环。我正在构建一个服务器,通过TCP接收输入,并在main((函数的循环中更新缓存中存储的内容。

这就是我目前拥有的:

import socket
import binascii
import struct
import asyncio
TCP_IP = '127.0.0.1'
TCP_PORT = 30194
BUFFER_SIZE = 1024
loop = asyncio.get_event_loop()
coro = asyncio.start_server(incomingData, TCP_IP, TCP_PORT)
server = loop.run_until_complete(coro)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
# Async method to handle incoming connections
async def incomingData(reader, writer):
data = await reader.read(BUFFER_SIZE)
incomingMessage = data.decode()
addr = writer.get_extra_info('peername')
print("Received %r from %r" % (incomingMessage, addr))
# [0] login packet
if ord(incomingMessage[0]) == 0:
username = ""
password = ""
try:
usernameLength = ord(incomingMessage[1]) + 2 # plus two for the 2 chars taken up by the hex
passwordLength = ord(incomingMessage[usernameLength]) + 1 + usernameLength
for x in range(2,usernameLength):
username += incomingMessage[x]
for i in range(usernameLength,passwordLength):
password += incomingMessage[i]
loginHandler.username = username
loginHandler.password = password
except:
print("Unexpected error")
writer.write(data)
await writer.drain()
writer.close()

然而,如果我添加一个循环来包含loop.run_forever(),那么它只输出一次打印行,再也不会输出(我希望它在一个循环中打印数百次(-例如:

try:
while True:
print("debug print?")
loop.run_forever()

在执行中只打印一次-我怎么能让一个逻辑循环与异步TCPstart_server循环并行运行?

您可以尝试多线程。

所以你可以为你正在尝试做的两件事创建一个线程

你可以看看这个https://www.tutorialspoint.com/python/python_multithreading.htm

这是我的第一个答案。

相关内容

最新更新