请求从前端到后端跟踪调试

请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢,今天我们就来看看。

抓包文件分析

准备用我在测试环境抓到的包去进行分析,首先执行抓包命令。

sudo tcpdump   -i lo  port  6310 -w http.pcap

-w 命令能让我在服务器上抓到的包保留到 http.pcap 文件里,然后我将这个文件从服务器上dump下来,用wireshark去进行分析。

tcp delta time

首先来看看对于tcp 包和延迟相关的属性。

follow 一个tcp 流

有关tcp time的时间信息在协议的传输层,点击查看可以发现有两个列,分别是

[Time since first frame in this TCP stream: 0.036151000 seconds]
[Time since previous frame in this TCP stream: 0.032279000 seconds]

Time since first frame 代表在该tcp流中,这个tcp包距离第一个tcp包相隔多少时间。

Time since previous frame 代表这个tcp包距离上一个tcp包相隔多少时间。

我们还可以将Time since previous frame 设置为自定义列,然后按这个时间排序就可以找出从传输层的角度延迟比较大的包了。

操作如下:

因为默认wireshark会解析http协议,这不便于我们单独的查看传输层的tcp包,所以把http协议的解析先关闭下。


接着将Time since previous frame 设置为自定义列,并对其进行排序

这样便可以找出是哪个tcp包延迟过大,进而可以针对它做具体的分析。

http time

除了在传输层的针对tcp的延迟分析,同样可以针对应用层做延迟分析,通过http.time 可以得到慢http请求信息。

这样便能在抓包文件中一下定位到慢http请求,我们甚至可以保存这个过滤器,以便下次抓不同包的时候能直接应用上这个过滤器,像下面这样操作

bad Tcp

无论是http time 还是tcp delta time 都是发现延迟的利器,但要弄清楚究竟为什么发生延迟,还需要从tcp的行为去分析原因。

在wireshark中异常的数据包可以通过tcp.analysis.flags 过滤器去筛选出来。

它可以筛选出异常的tcp数据包,比如重传,duplicated Ack ,找到异常数据包以后便可以快速的根据异常包的上下文去分析异常的原因了。

总结

🔥🔥性能优化,服务监控方面的知识往往涉及量广且比较零散,我会持续输出这方面的内容,将这部分知识整理成册,愿以后性能排查不再抓瞎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
我可以向您提供一些指导,但首先需要明确一点,Python是一种后端编程语言,它通常用于处理服务器端逻辑和与数据库交互等任务。因此,在Python中,前端后端的界面实现通常需要与其他前端技术(如HTML、CSS和JavaScript)和Web框架(如Flask或Django)结合使用。 有关Python中实现前端后端登录界面的调试代码,您可以尝试以下步骤: 1. 在后端编写处理用户登录请求的Python代码,您可以使用任何Web框架,例如Flask或Django。您需要实现逻辑以接收用户提交的登录表单数据并将其与存储用户凭据的数据库中的数据进行比较。如果匹配成功,您可以在后端创建并返回一个认证令牌。这个令牌将用于保持用户的身份验证状态,并且将在前端每个请求中发送到后端以获得受保护的资源。 例如,以下是使用Flask框架实现的后端Python代码示例: ``` from flask import Flask, request, jsonify from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) # This is a demo implementation, you should use a more secure way to store users' credentials USERS = { 'admin': generate_password_hash('password'), 'user': generate_password_hash('secret') } @app.route('/login', methods=['POST']) def login(): username = request.json.get('username') password = request.json.get('password') if not username or not password: return jsonify({'message': 'Username or password cannot be empty'}), 401 if username not in USERS or not check_password_hash(USERS[username], password): return jsonify({'message': 'Invalid username or password'}), 401 # Generate an authentication token token = 'your-authentication-token' return jsonify({'token': token}) if __name__ == '__main__': app.run(debug=True) ``` 2. 在前端编写一个登录表单,使用HTML、CSS和JavaScript制作,并将其与后端连接。您可以将表单提交到后端Python代码的URL地址,例如 `http://localhost:5000/login`。 例如,以下是一个简单的HTML登录表单,它使用JavaScript将数据提交到后端Python代码,并将令牌保存到浏览器的Cookie中: ``` <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <form> <label>Username:</label> <input type="text" id="username" name="username"><br><br> <label>Password:</label> <input type="password" id="password" name="password"><br><br> <input type="button" value="Submit" onclick="login()"> </form> <script> function login() { var username = document.getElementById('username').value; var password = document.getElementById('password').value; var xhr = new XMLHttpRequest(); xhr.open('POST', 'http://localhost:5000/login'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { // Save the token to the browser's cookie document.cookie = 'token=' + JSON.parse(xhr.responseText).token; window.location.href = 'profile.html'; // Redirect to the protected page } else { alert(JSON.parse(xhr.responseText).message); } } }; xhr.send(JSON.stringify({username: username, password: password})); } </script> </body> </html> ``` 3. 在前端运行一个服务器,以在本地主机上托管前端代码。您可以使用任何Web框架,例如Express或http-server。运行前,您需要安装Node.js,并在命令行运行 `npm install express --save`(或其他您选择的Web框架)。 例如,以下是使用Express框架实现的前端JavaScript代码示例: ``` const express = require('express'); const app = express(); app.use(express.static('public')); app.listen(3000, () => { console.log('Server is running on http://localhost:3000'); }); ``` 4. 打开浏览器并导航到前端的本地主机地址,例如 `http://localhost:3000/login.html`。您应该能够看到一个登录表单,您可以使用它进行用户身份验证。如果通过身份验证,则应将重定向到受保护的页面。 请记住,这只是一个简单的示例,您应该根据自己的要求定制它,并实现更安全的认证方式,例如使用JSON Web Tokens(JWTs)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶朕去网吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值