首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - Bots,Asyncio,Javascript和Loops

Python - Bots,Asyncio,Javascript和Loops
EN

Stack Overflow用户
提问于 2018-05-22 02:24:24
回答 1查看 124关注 0票数 2

大家好,谢谢你们抽出时间。在前几天,我经历了一个我的小项目,创建一个线上聊天机器人。我理解API,但遇到了一个问题。我正在尝试让我的chabot使用在线回复用户的文本。为了实现这一点,我尝试在python和JavaScript之间使用websocket。我使用的API在Python中,因此websocket也必须用python编写。我选择了异步websockets。简而言之,我试图从在线的用户输入中获取一个响应->通过websocket将响应发送到浏览器控制台中的我的javascript -> javascript将继续它的逻辑并将响应发送回服务器->该程序将继续执行它的执行。我的问题是,Websocket编程和我的Line编程都使用一个循环。线路代码可在

https://github.com/fadhiilrachman/line-py/blob/master/examples/groupbot.py

正如您在代码末尾看到的,有一个while语句,它对每条消息一次又一次地跟踪READ_MESSAGE函数。您可以忽略NOTIFIED_LEAVE 1。因此,基本上,我的代码在继续执行自己的逻辑时,然后执行如下操作:

代码语言:javascript
复制
else:
#ExternalBot code
ExtText = text[6:]

现在,我希望通过我的websocket将这个ExtText发送到我的javascript,它将从浏览器获取一个响应并将其发回。javascript将执行如下操作:

代码语言:javascript
复制
exampleSocket = new WebSocket("ws://192.168.1.9:8765/") 
exampleSocket.onmessage = function(e){
var server_message = e.data;
console.log(server_message);
(logic)
exampleSocket.send(response);

这就是问题的开始,因为我根本不知道该如何进行。python异步Websockets需要一个循环来运行,如下所示:

代码语言:javascript
复制
async def Send(websocket, path):
    await websocket.send(ExtText)
    await Receive(websocket, path)

async def Receive(websocket, path):
    resposne = await websocket.recv()
    if response is None:
        await Recieve(websocket, path)
    else:
        print (Response)

    start_server = websockets.serve(Send,'192.168.1.9','8765')
    loop = asyncio.get_event_loop()
    loop.run_untill_complete(start_server)
    loop.run_forever()

   (continue to do a line.send() the response back to the client on Line.)

这是我目前的代码。现在的问题是,如果我从来没有用类似loop.call_soon_threadsafe(loop.stop)之类的东西来关闭循环,那么它将继续运行,然后消息将永远不会被发送回客户机(程序将不会继续执行它的行逻辑)。如果我确实关闭了循环,那么服务器实际上是“关机”。如果服务器关闭并重新打开我必须通过websocket发送的每一条消息,那么我现在面临的问题是让我的JavaScript不断地尝试重新连接到服务器上的每一条消息。我尝试过这一点,但从未成功地让Javascript继续尝试建立连接。我尝试过使用Javascript websocket readyState属性,但这也不起作用。我之所以来到这里,只是因为我不知道如何继续下去,也不知道该做些什么。你们怎么建议我继续,关闭循环,或者以某种方式让它打开,但继续我的程序逻辑。如果是这样的话,您将如何将其实现到我已经循环的代码中(一行虽然是true语句)?我真的为这么长的问题道歉,但我完全被困住了。感谢你们的时间,决定阅读和帮助我的人,我真的很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 01:32:40

经过几天的研究,我已经通过将循环分成两个python脚本并在它们之间进行通信来解决这个问题。如果在座的任何人有类似的问题,并希望得到更深入的解释,请随时问我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50458910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档