云端卫士 | 用Netperf测试传统socket性能报告
haoteby 2025-09-11 01:09 13 浏览
《实战录》导语
本期分享人为云端卫士安全能力工程师陈冲,将介绍使用netperf进行测试传统socket性能测试。由于本文较长,为方便离线阅读,在文末可以下载PDF版本。
Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。本文中我们将介绍使用netperf进行测试传统socket性能测试。
一、测试环境
1. 系统环境
1. 发报机测试环境
O 操作系统类型: Linux
O 操作系统版本: CentOS 7.0
O 内核版本:3.10.0-123.el7.x86_64
O 千兆网卡型号:BCM5720
2. 收报机测试环境
O 操作系统类型: Linux
O 操作系统版本: CentOS 7.0
O 内核版本:3.10.0-123.el7.x86_64
O 千兆网卡型号:Intel Corporation I350 Gigabit
测试中发报网口和收报网口采用直连的方式。
2. Netperf版本
版本:netperf-2.7.0
二、性能测试
Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。
Server端运行命令: netserver -D -p 4444
当netserver在server端启动以后,就可以在client端运行netperf来测试网络的性能。netperf通过命令行参数来控制测试的类型和具体的测试选项。根据作用范围的不同,netperf的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数。
两者之间使用--分隔:netperf [global options]-- [test-specific options]
这里我们只解释那些常用的命令行参数,其它的参数读者可以查询netperf的man手册。
-H host :指定远端运行netserver的server IP地址。
-p port : 指定远端运行netsever的端口
-l testlen:指定测试的时间长度(秒)
-t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR。
TCP_STREAM: Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:
TCP_RR: 方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。
TCP_CRR: 与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。
UDP_STREA: 用来测试进行UDP批量传输时的网络性能。需要特别注意的是,此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示.
UDP_R: 方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以我们推测交易率一定会有相应的提升。
局部参数:
-s size: 设置本地系统的socket发送与接收缓冲大小
-S size:设置远端系统的socket发送与接收缓冲大小
-m size:设置本地系统发送测试分组的大小
-M size: 设置远端系统接收测试分组的大小
-r req,resp: 设置re’quest和reponse分组的大小
1. TCP网络性能
1).单个TCP连接,批量传输大量数据
1. 测试网络分组对于传统socket速率的影响,网络分组可以理解为一次性发送一组报文,主要测试路由器是否缺乏足够的缓冲区空间进而对socket的传输速率有影响,但是在本测试环境下两个网口是直连的,所以预计分组对于吞吐量没有任何影响。
客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444 -- -m size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(Mbit/s) |
1000 | 16834 | 87380 | 2048 | 20 | 1 | 941.42 |
1000 | 16384 | 87380 | 4096 | 20 | 1 | 941.43 |
1000 | 16384 | 87380 | 8192 | 20 | 1 | 941.23 |
1000 | 16384 | 87380 | 16384 | 20 | 1 | 941.43 |
2. 测试本地缓冲对于传统socket速率的影响。
客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444 -- -s size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(Mbit/s) |
1000 | 2048 | 87380 | 16834 | 20 | 1 | 180.62 |
1000 | 4096 | 87380 | 16384 | 20 | 1 | 487.49 |
1000 | 8192 | 87380 | 16384 | 20 | 1 | 911.80 |
1000 | 16384 | 87380 | 16384 | 20 | 1 | 941.43 |
3. 测试远端缓冲对于传统socket速率的影响。
客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444 -- -S size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(Mbit/s) |
1000 | 16834 | 10922 | 16834 | 20 | 1 | 361.88 |
1000 | 16384 | 21845 | 16384 | 20 | 1 | 633.07 |
1000 | 16384 | 43960 | 16384 | 20 | 1 | 935.92 |
1000 | 16384 | 87380 | 16384 | 20 | 1 | 941.25 |
4. 测试多客户端的传统socket速率。
客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(Mbit/s) |
1000 | 16834 | 87380 | 16834 | 60 | 1 | 941.45 |
1000 | 16384 | 87380 | 16384 | 60 | 2 | 946.18 |
1000 | 16384 | 87380 | 16384 | 60 | 3 | 955.00 |
1000 | 16384 | 87380 | 16384 | 60 | 4 | 966.76 |
2).单个TCP连接,C/S应答传输方式
1. 测试请求和回应大小对传统socket的影响。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_RR -l 20 –p 4444 -- -r req,resp
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 87380 | 32,1024 | 20 | 1 | 12520.23 |
1000 | 16384 | 87380 | 64,2048 | 20 | 1 | 10482.84 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 8147.92 |
1000 | 16384 | 87380 | 256,8192 | 20 | 1 | 5979.66 |
2. 测试本地缓冲对于传统socket速率的影响。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_RR -l 20 –p 4444 -- -r 128,4096
-s size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 2048 | 87380 | 128,4096 | 20 | 1 | 4024.14 |
1000 | 4096 | 87380 | 128,4096 | 20 | 1 | 5715.72 |
1000 | 8192 | 87380 | 128,4096 | 20 | 1 | 8183.53 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 8166.50 |
3. 测试远端缓冲对于传统socket速率的影响。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_RR -l 20 –p 4444 -- -r 128,4096
-S size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 10922 | 128,4096 | 20 | 1 | 8006.47 |
1000 | 16384 | 21845 | 128,4096 | 20 | 1 | 8115.49 |
1000 | 16384 | 43960 | 128,4096 | 20 | 1 | 8127.54 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 8307.24 |
4. 测试多客户端的传统socket速率
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_RR -l 20 –p 4444 -- -r 128,4096
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 87380 | 128,4096 | 60 | 1 | 8158.19 |
1000 | 16384 | 87380 | 128,4096 | 60 | 2 | 19586.97 |
1000 | 16384 | 87380 | 128,4096 | 60 | 3 | 19973.21 |
1000 | 16384 | 87380 | 128,4096 | 60 | 4 | 28960.2 |
3).多个TCP连接,每个链接C/S应答传输方式
1. 测试请求和回应大小对传统socket的影响。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_CRR -l 20 –p 4444 -- -r req,resp
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 87380 | 32,1024 | 20 | 1 | 5255.40 |
1000 | 16384 | 87380 | 64,2048 | 20 | 1 | 615.24 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 0.15 |
1000 | 16384 | 87380 | 256,8192 | 20 | 1 | 0.05 |
2. 测试本地缓冲对于传统socket速率的影响。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_CRR -l 20 –p 4444 -- -r 64,2048
-s size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 2048 | 87380 | 64,2048 | 20 | 1 | 3662.88 |
1000 | 4096 | 87380 | 64,2048 | 20 | 1 | 251.15 |
1000 | 8192 | 87380 | 64,2048 | 20 | 1 | 0.10 |
1000 | 16384 | 87380 | 64,2048 | 20 | 1 | 3411.25 |
3. 测试远端缓冲对于传统socket速率的影响。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_CRR -l 20 –p 4444 -- -r 64,2048
-S size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 10922 | 64,2048 | 20 | 1 | 2641.94 |
1000 | 16384 | 21845 | 64,2048 | 20 | 1 | 636.05 |
1000 | 16384 | 43960 | 64,2048 | 20 | 1 | 0.25 |
1000 | 16384 | 87380 | 64,2048 | 20 | 1 | 2640.34 |
4. 测试多客户端的传统socket速率。
客户端运行命令: ./netperf –H 192.168.20.124 –t TCP_CRR -l 20 –p 4444 -- -r 64,2048
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 87380 | 64,2048 | 60 | 1 | 635.65 |
1000 | 16384 | 87380 | 64,2048 | 60 | 2 | 2639.95 |
1000 | 16384 | 87380 | 64,2048 | 60 | 3 | 3271.30 |
1000 | 16384 | 87380 | 64,2048 | 60 | 4 | 12738.98 |
2. UDP网络性能
1).从client到server的单向批量传输
1. 测试网络分组对于传统socket速率的影响,网络分组可以理解为一次性发送一组报文,主要测试路由器是否缺乏足够的缓冲区空间进而对socket的传输速率有影响,但是在本测试环境下两个网口是直连的,所以预计分组对于吞吐量没有任何影响。
./netperf –H 192.168.20.124 –t UDP_STREAM -l 20 –p 4444 -- -m size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(本地/远端)(Mbit/s) |
1000 | 16834 | 87380 | 2048 | 20 | 1 | 941.37/941.37 |
1000 | 16384 | 87380 | 4096 | 20 | 1 | 956.98/956.98 |
1000 | 16384 | 87380 | 8192 | 20 | 1 | 957.40/957.40 |
1000 | 16384 | 87380 | 16384 | 20 | 1 | 957.85/957.85 |
2. 测试本地缓冲对于传统socket速率的影响。
./netperf –H 192.168.20.124 –t UDP_STREAM -l 20 –p 4444 -- -s size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(本地/远端)(Mbit/s) |
1000 | 2048 | 87380 | 16834 | 20 | 1 | 316.41/316.41 |
1000 | 4096 | 87380 | 16384 | 20 | 1 | 523.15/523.15 |
1000 | 8192 | 87380 | 16384 | 20 | 1 | 849.62/849.62 |
1000 | 16384 | 87380 | 16384 | 20 | 1 | 952.76/952.76 |
3. 测试远端缓冲对于传统socket速率的影响。
./netperf –H 192.168.20.124 –t UDP_STREAM -l 20 –p 4444 -- -S size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(本地/远端)(Mbit/s) |
1000 | 16834 | 10922 | 16834 | 20 | 1 | 960.89/320.40 |
1000 | 16384 | 21845 | 16384 | 20 | 1 | 960.91/640.88 |
1000 | 16384 | 43960 | 16384 | 20 | 1 | 960.83/960.83 |
1000 | 16384 | 87380 | 16384 | 20 | 1 | 960.27/960.27 |
4. 测试多客户端的传统socket速率。
./netperf –H 192.168.20.124 –t UDP_STREAM -l 20 –p 4444
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(本地/远端)(Mbit/s) |
1000 | 2048 | 87380 | 16834 | 60 | 1 | 314.16/314.16 |
1000 | 2048 | 87380 | 16384 | 60 | 2 | 532.13/532.13 |
1000 | 2048 | 87380 | 16384 | 60 | 3 | 729.53/729.53 |
1000 | 2048 | 87380 | 16384 | 60 | 4 | 885.29/885.29 |
2).请求/应答的传输方式
1. 测试请求和回应大小对传统socket的影响
./netperf –H 192.168.20.124 –t UDP_RR -l 20 –p 4444 -- -r req,resp
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 87380 | 32,1024 | 20 | 1 | 13022.64 |
1000 | 16384 | 87380 | 64,2048 | 20 | 1 | 11145.04 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 8122.09 |
1000 | 16384 | 87380 | 256,8192 | 20 | 1 | 6385.09 |
2. 测试本地缓冲对于传统socket速率的影响。
./netperf –H 192.168.20.124 –t UDP_RR -l 20 –p 4444 -- -r 128, 4096 –s size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 2048 | 87380 | 128,4096 | 20 | 1 | 8161.03 |
1000 | 4096 | 87380 | 128,4096 | 20 | 1 | 8119.68 |
1000 | 8192 | 87380 | 128,4096 | 20 | 1 | 8156.98 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 8117.19 |
3. 测试远端缓冲对于传统socket速率的影响。
./netperf –H 192.168.20.124 –t UDP_RR -l 20 –p 4444 -- -r 128, 4096 –S size
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 10922 | 128,4096 | 20 | 1 | 8143.69 |
1000 | 16384 | 21845 | 128,4096 | 20 | 1 | 8175.94 |
1000 | 16384 | 43960 | 128,4096 | 20 | 1 | 8162.49 |
1000 | 16384 | 87380 | 128,4096 | 20 | 1 | 8145.13 |
4. 测试多客户端的传统socket速率。
./netperf –H 192.168.20.124 –t UDP_RR -l 20 –p 4444 -- -r 128, 4096
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | Request/response分组大小 | 测试时间(s) | 客户端个数 | 平均交易率(次/s) |
1000 | 16834 | 87380 | 128,4096 | 20 | 1 | 8154.49 |
1000 | 16384 | 87380 | 128,4096 | 20 | 2 | 9413.04 |
1000 | 16384 | 87380 | 128,4096 | 20 | 3 | 13636.28 |
1000 | 16384 | 87380 | 128,4096 | 20 | 4 | 17881.63 |
三、万兆口测试
网络环境对于传统socket的影响在千兆网卡已经测试过,这里只测试传统socket在万兆网卡的发送最大速率。
1. 单个tcp连接,传输大量数据
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(Mbit/s) |
10000 | 2048 | 87380 | 16834 | 20 | 1 | 187.70 |
10000 | 4096 | 87380 | 16384 | 20 | 1 | 426.38 |
10000 | 8192 | 87380 | 16384 | 20 | 1 | 674.72 |
10000 | 16384 | 87380 | 16384 | 20 | 1 | 1412.94 |
10000 | 32768 | 87380 | 16384 | 20 | 1 | 3012.96 |
10000 | 65536 | 87380 | 16384 | 20 | 1 | 4331.53 |
10000 | 131072 | 87380 | 16384 | 20 | 1 | 7648.29 |
10000 | 262144 | 87380 | 16384 | 20 | 1 | 9090.01 |
10000 | 524288 | 87380 | 16384 | 20 | 1 | 9224.95 |
2. UDP传输大量数据
网卡速率(Mbps) | 本地socket缓冲(bytes) | 远端socket缓冲(bytes) | 测试分组大小(bytes) | 测试时间(s) | 客户端个数 | 吞吐量(本地)(Mbit/s) |
10000 | 2048 | 87380 | 16834 | 20 | 1 | 264.17 |
10000 | 4096 | 87380 | 16384 | 20 | 1 | 524.36 |
10000 | 8192 | 87380 | 16384 | 20 | 1 | 1049.24 |
10000 | 16384 | 87380 | 16384 | 20 | 1 | 2098.49 |
10000 | 32768 | 87380 | 16834 | 20 | 1 | 4194.99 |
10000 | 65536 | 87380 | 16384 | 20 | 1 | 8380.90 |
10000 | 131072 | 87380 | 16384 | 20 | 1 | 9604.07 |
四、测试总结
1. 本地和远端的缓存越大,socket的性能越高
2. 传统socket使用千兆网卡基本上可以接近线速,但是无法达到
3. 在tcp应答模式下,字节越大,交易次数越少,但是传输的字节数会增大,效率越高
4. 在tcp应答模式下,本地和远端的缓存越大,效率越高
5. 在tcp应答模式下,多个客户端可以充分利用网络资源、
6. UDP的传输速度大于TCP
7. 在本地socket缓冲达到131072byte时,万兆网卡可以接近线速
温馨提示:下载PDF版本,请点击
https://pan.baidu.com/s/1eRMslMy
相关推荐
- 如何随时清理浏览器缓存_清理浏览器缓存怎么弄
-
想随时清理浏览器缓存吗?Cookieformac版是Macos上一款浏览器缓存清理工具,所有的浏览器Cookie,本地存储数据,HTML5数据库,FlashCookie,Silverlight,...
- Luminati代理动态IP教程指南配置代理VMLogin中文版反指纹浏览器
-
介绍如何使用在VMLogin中文版设置Luminati代理。首先下载VMLogin中文版反指纹浏览器(https://cn.vmlogin.com)对于刚接触Luminati动态ip的朋友,是不是不懂...
- mac清除工具分享,解除您在安全方面的后顾之忧
-
想要永久的安全的处理掉重要数据,删除是之一,使用今天小编分享的mac清除工具,为您的操作再增一层“保护”,小伙伴慎用哟,一旦使用就不可以恢复咯,来吧一起看看吧~mac清除工具分享,解除您在安全方面的后...
- 取代cookie的网站追踪技术:”帆布指纹识别”
-
【前言】一般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动。Co...
- 辅助上网为啥会被抛弃 曲奇(Cookie)虽甜但有毒
-
近期有个小新闻,大概很多小伙伴都没有注意到,那就是谷歌Chrome浏览器要弃用Cookie了!说到Cookie功能,很多小伙伴大概觉得不怎么熟悉,有可能还不如前一段时间被弃用的Flash“出名”,但它...
- 浏览器指纹是什么?浏览器指纹包括哪些信息
-
本文关键词:浏览器指纹、指纹浏览器、浏览器指纹信息、指纹浏览器原理什么是浏览器指纹?浏览器指纹是指浏览器的各种信息,当我们访问其他网站时,即使是在匿名的模式下,这些信息也可以帮助网站识别我们的身份。...
- 那些通用清除软件不曾注意的秘密_清理不常用的应用软件
-
系统清理就像卫生检查前的大扫除,即使你使出吃奶的劲儿把一切可能的地方都打扫过,还会留下边边角角的遗漏。随着大家电脑安全意识的提高,越来越多的朋友开始关注自己的电脑安全,也知道安装360系列软件来"武装...
- 「网络安全宣传周」这些安全上网小知识你要知道!
-
小布说:互联网改变了人们的衣食住行,但与之伴生的网络安全威胁也不容忽视。近些年来,风靡全球的勒索病毒、时有发生的电信诈骗、防不胜防的个人信息泄露时时刻刻都威胁着我们的生活。9月18日-24日是第四届...
- TypeScript 终极初学者指南_typescript 进阶
-
在过去的几年里TypeScript变得越来越流行,现在许多工作都要求开发人员了解TypeScript...
- jQuery知识一览_jquery的认识和使用
-
一、概览jQuery官网:https://jquery.com/jQuery是一个高效、轻量并且功能丰富的js库。核心在于查询query。...
- 我的第一个Electron应用_electronmy
-
hello,好久不见,最近笔者花了几天时间入门Electron,然后做了一个非常简单的应用,本文就来给各位分享一下过程,Electron大佬请随意~笔者开源了一个Web思维导图,虽然借助showSav...
- HTML5 之拖放(Drag 和 Drop)_html拖放api
-
简介拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在HTML5中,拖放是标准的一部分,任何元素都能够拖放。先点击一个小例子:在用户开始拖动<p>元素时执行JavaScrip...
- 如何用JavaScript判断输入值是数字还是字母?
-
在日常开发中,我们有时候需要判断用户输入的是数字还是字母。本文将介绍如何用JavaScript实现这一功能。检查输入值是否是数字或字母...
- 图形编辑器开发:快捷键的管理_图形编辑工具
-
大家好,我是前端西瓜哥。...
- 浏览器原生剪贴板:原来它能这样读取用户截图!
-
当我们使用GitHub时,会发现Ctrl+V就能直接读取用户剪贴板图片进行粘贴,那么它是如何工作的?安全性如何?...