使用websocket开发智能聊天机器人

news/2024/11/25 4:56:15/

今天我们学习websocket技术。

websocket简介

我们知道HTTP协议是:请求->响应,如果没有响应就一直等着,直到超时;但是有时候后台的处理需要很长时间才能给到结果,比如30分钟,那HTTP的请求不可能等这么久,所以,可以通过 Ajax 轮询来解决。那就是每间隔一段时间就请求一次。

这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

好了,WebSocket就是为了解决这个问题的,感兴趣去看其他资料!

智能聊天机器人

我一开始只是为了学习WebSocket找个例子,不少例子使用了聊天功能。我稍加改进就变成了智能聊天功能了。

通过异步sanic异步框架实现Web功能。官方文档里面给个WebSocket使用的例子。

https://sanic.readthedocs.io/en/latest/sanic/websocket.html

snaic部分核心代码如下:

import sanic
import httpx
from sanic import Sanic
from sanic.response import json
from sanic.websocket import WebSocketProtocol
from sanic.exceptions import NotFound
from sanic.response import html
from jinja2 import Environment, PackageLoaderenv = Environment(loader=PackageLoader('app', 'templates'))app = Sanic(__name__)@app.route('/')
async def index(request):"""聊天页面"""template = env.get_template('index.html')html_content = template.render(title='聊天机器人')return html(html_content)@app.websocket('/chat')
async def chat(request, ws):"""处理聊天信息,并返回消息"""while True:user_msg = await ws.recv()print('Received: ' + user_msg)intelligence_data = {"key": "free", "appid": 0, "msg": user_msg}r = httpx.get("http://api.qingyunke.com/api.php", params=intelligence_data)chat_msg = r.json()["content"]print('Sending: ' + chat_msg)await ws.send(chat_msg)if __name__ == "__main__":app.error_handler.add(NotFound,lambda r, e: sanic.response.empty(status=404))app.run(host="192.168.0.7", port=8000, protocol=WebSocketProtocol, debug=True)
  • index() 函数,返回聊天页面。这里用到了jinja2 模板渲染库。
  • chat() 函数,通过webSocket实现消息的接收、处理和返回。

智能聊天是怎么做到的,这里要感谢 青云客网络,他们提供了免费的接口。(我当时也只是抱着试试看的态度,没想到,duang~! )

user_msg = "你好!"
intelligence_data = {"key": "free", "appid": 0, "msg": user_msg}
r = httpx.get("http://api.qingyunke.com/api.php", params=intelligence_data)
chat_msg = r.json()["content"]
print(chat_msg)

是不是超简单。

再来看前端代码,主要部分:

  <div class="container theme-showcase" role="main" style="margin-top: 80px;"><div id="contents" style="height: 600px; background-color:#eee;"></div><div><textarea class="form-control" id="msg"></textarea><button class="btn btn-lg btn-info" onclick="sendMsg()" style="float: right;">发送</button></div></div><script src="http://code.jquery.com/jquery-2.1.1.min.js"></script><script type="text/javascript">var ws = new WebSocket("ws://192.168.0.7:8000/chat");ws.onmessage = function(e) {$("#contents").append('<div class="alert alert-info" role="alert" style="float: left;">' + "机器人: " + e.data + "</div><br><br><br><br>");}function sendMsg() {var msg = $("#msg").val();$("#contents").append('<div class="alert alert-info" role="alert" style="float:right">' + msg + "</div><br><br><br><br>");ws.send(msg);$("#msg").val("");}</script>

这里使用到了 bootstrap 前端框架,主要 调用部分在:

var Socket = new WebSocket(url, [protocol] );
  • Socket.send(msg): 使用连接发送数据。
  • Socket.onmessage: 客户端接收服务端数据时触发。

我知道,你迫不及待想要完整的代码了:

GitHub - defnngj/learning-API-test: learning API test

正在做测试的朋友可以进来交流,群里给大家整理了大量学习资料和面试题项目简历等等....


http://www.ppmy.cn/news/506995.html

相关文章

html在qq怎么全屏显示,QQ怎么设置全屏资料背景

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 以小米手机为例&#xff0c;QQ设置全屏资料背景方法如下&#xff1a; 1、进入手机QQ主页面&#xff0c;找到左上角【头像】选项&#xff0c;点击打开。 2、在头像界面&#xff0c;找…

QQ Tim背景案例

文章目录 资源链接展示代码index.htmlindex.cssstyle.css &#xff08;基础标签样式&#xff09; 资源链接 https://download.csdn.net/download/weixin_45525272/14835381 展示 代码 index.html <!DOCTYPE html> <html lang"en"><head><me…

手机计算机怎么改背景,qq聊天背景隔离区怎么制作?QQ隔离区背景制作教程(电脑版手机版)...

最近很火的qq隔离区聊天背景图片热烈受到小伙伴们的欢迎&#xff0c;不会制作此背景的只能在网上翻来覆去的寻找属于自己风格的背景&#xff0c;如今&#xff0c;小编为大家开了QQ隔离区背景制作教程&#xff0c;这下自己喜欢什么颜色&#xff0c;喜欢什么文字都可以随心所欲的…

壁纸背景墙/头像/动态壁纸小程序源码-支持用户投稿-带部分采集功能+搭建教程

介绍&#xff1a; 今天自己搭建测试了一下这款背景墙/头像/动态壁纸小程序源码&#xff0c;源码使用dcloud云开发 (云开发优势&#xff1a;无需服务器域名直接搭建部署即可&#xff0c;成本低方便维护。&#xff09;支持微信QQ双端小程序也就是说可以打包成微信小程序也可以打…

如何在QQ空间中使用背景图片

有些时候我们在QQ空间写日志的时候喜欢给自己的日志增加一个背景图片&#xff0c;这样日志看起来就不空洞了&#xff0c;但是当我们设置完背景图片后点击发表后&#xff0c;却发现背景图片莫名其妙的没有了。如下面的例子&#xff1a; 发表之前的代码&#xff08;图1&#xff…

msgbox.html5.qq.com,怎样制作qq透明背景皮肤

为了让自己的qq面板变得更加独特、更加炫酷&#xff0c;我们不妨为自己的qq背景皮肤设置为透明的效果&#xff0c;下面就让学习啦小编告诉你怎样制作qq透明背景皮肤。 制作qq透明背景皮肤的方法 一、 QQ登录界面 1.QQ经典登录界面 首先我们解包Res.rdb 解包后是一个与res同名的…

HTML5 QQ登录背景动态图片

原文: HTML5 QQ登录背景动态图片 预览效果如图所示&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>html5背景</title><style type…

win10文件服务器ssd当缓存盘,Win10怎么启用设备上的写入缓存|提高固态硬盘性能方法...

Win10系统中启用设备上的写入缓存(W)&#xff0c;可以给SSD固态硬盘带来更快的硬盘读写速度&#xff0c;不过坏处就是停电或设备故障可能会导致数据丢失或损坏&#xff0c;大家可以根据自身的情况&#xff0c;要不要开启这个功能。这篇文字是PE吧给大家带来的方法教程。 方法/步…