Python websocket 服务器命令流 (lua 客户端)?

在看了一个 YouTuber 使用 websocket 服务器与视频游戏 (minecraft) 中的实体进行交互之后: https://www.youtube.com/watch?v=pwKRbsDbxqc&t=25s&ab_channel=Ottomated

我想再现同样的想法,但是有些小改动:

  • 我想 websocket 服务器在 python 中作为主机
  • 我想在没有任何 html 或 javascript 的情况下进行交互

所以我建立了 websocket 服务器:

#!/usr/bin/env python

import asyncio
import websockets

async def server(websocket, path):
    data = await websocket.recv()

    while True:
        msg = input('type the command: ')
        await websocket.send(msg)

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

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

(非常简单)

以及客户端 (在 lua 中):

print('connecting')

local ws, err = http.websocket("ws://localhost:8765")

if not ws then
    return printError(err)
    ws.close()
end

ws.send("message")

repeat
    command = ws.receive()
    load(command)()
until command == "stop"

ws.close()

唯一的问题是,在 lua 程序执行第一条消息之后,它就停止处理其他消息了。

我不知道我做错了什么!

我是不是做错了?或者也许有更好的方法?

点赞
用户15179228
用户15179228

仍在学习 sockets 和提高我的服务器端技能的过程中,但很容易,你只需要将它做成一个循环 while true: 或我更偏爱一个可控变量 kim = true while kim:,然后你通过将其设为 false 或 true 来在一定的条件下关闭或开启循环,我认为你需要像线程这样的东西来不阻塞其他客户端输入

我没有学过 Web 服务器,但问题就我所认为的是,因为它没有在循环中,所以你只会接收到一个消息,它会执行代码然后关闭。

2021-02-09 21:49:07