libwebsockets库 README.test-apps.md 翻译

lws测试应用概述

如果您正在构建一个独立的服务器,按照优先顺序,有三种选择。.

1. lwsws + protocol 插件

  Lws提供了一个通用的web服务器应用程序,可以使用JSON配置文件进行配置。 https://libwebsockets.org 这个网站也是使用这种方法。
  由于lwsws处理服务部分,您只需要编写一个lws protocol插件。如需了解如何在lws自身之外使用lws公共api执行此操作的示例,请参见plugin-standalone

$ cmake .. -DLWS_WITH_LWSWS=1

  有关如何配置lwsws的信息,请参见README.lwsws.md
  注意,这个方法意味着lws使用libuv,它为插件和lwsw提供跨平台的定时器实现、动态lib加载等。

2. test-server-v2.0.c

  此方法允许您在代码中配置web服务,而不是使用lwsws。
  插件仍在使用,这意味着需要libuv。

$ cmake..-DLWS_WITH_PLUGINS=1

  参见 test-server-v2.0.c

3. protocols in the server app

  这是lws实现服务器的原始方式,不需要插件和libuv,但如果没有插件直接分离协议代码,那么组合的代码都被拼凑在一起,不太容易维护。
  lws仍然支持这种方法,但所有正在进行的和未来的工作都只在协议插件中完成。

关于lws测试应用的说明

使用测试服务器

  如果您运行libwebsockets-test-server并用浏览器(例如Chrome)打开

http://127.0.0.1:7681

  浏览器会从服务器获取“test.html”网页。由于在网页内有一些脚本,浏览器在打开网页后将运行脚本以打开一个websocket连接。
  递增的数字将显示在浏览器中。
  默认情况下,测试服务器的记录会同时输出到stderr和syslog,您可以使用-d <log level>控制记录的内容,请参见下文。

将测试服务器作为守护程序运行

  您可以在执行测试服务器时使用-D选项将其fork到后台并立即返回。在这种后台模式下,所有的stderr都被禁用,日志记录只转到syslog,例如/var/log/messages或类似的。
  服务器在/tmp/.lwsts-lock处维护一个锁文件,它包含主进程的pid,并在主进程终止时删除该文件。
  要停止守护程序,请执行$ kill cat /tmp/.lwsts-lock
  如果它发现一个过时的锁(文件中提到的pid不再存在),它将在启动期间删除该锁并创建一个新的锁。
  如果锁有效,守护程序将退出,并在stderr上显示它已经在运行。

在服务器端使用SSL

  要使用SSL/WSS测试它,只需使用$ libwebsockets-test-server --ssl,并使用URLhttps://127.0.0.1:7681
  连接将使用浏览器不接受的某些生成的证书进行完全加密,因为它们没有任何真正的证书颁发机构签名。只需在浏览器中接受证书,连接将以https和websocket-wss进行,操作完全相同。
   test-server.c使用libwebsockets库,它包含全部所需的功能,以响应在html中的http和websockets脚本发送的请求。

websocket客户端支持

  如果如上所述运行测试服务器,还可以使用测试客户端和浏览器连接到它。

	$ libwebsockets-test-client localhost

  默认情况下,将连接到localhost:7681上的测试服务器,并在镜像协议中绘制随机圆圈的同时从服务器打印dumb增量号;
如果同时使用浏览器连接到测试服务器,则可以看到正在绘制的圆圈。
测试客户端也支持SSL,如下

	$ libwebsockets-test-client localhost --ssl -s

  -s告诉它接受来自服务器的默认自签名证书,否则如果没有CA证书来验证服务器的证书,它将严格地使连接失败。

在测试服务器变体之间选择

  如果您将使用lws进行独立服务,理想情况下,您应该完全避免制作自己的服务器,并将lwsws与自己的协议插件一起使用。
  第二个最好的选择是遵循test-server-v2.0.c,它使用mount来自动服务目录,以及用于ws的lws协议插件,而不需要任何用户回调代码(协议插件中需要的代码除外)。
  对于这两个选项,需要libuv来支持协议插件,如果不可能,那么应该考虑其他具有自己协议代码的变体。

echo 回显测试

  您可以对echo.websockets.org作为一个类似于这样的健全性测试(客户端默认连接到端口’80’):

	$ libwebsockets-test-echo --client echo.websocket.org

  但是,这个回显测试的用处有限,因为它不协商任何协议。默认情况下,您可以在localhost:7681上运行与本地服务器相同的测试应用程序

	$ libwebsockets-test-echo

  并对本地echo服务器进行echo测试

	$ libwebsockets-test-echo --client localhost --port 7681

  如果将 --ssl开关添加到客户端和服务器,还可以使用加密链接进行测试。

在客户端测试SSL

  要测试SSL/WSS客户端操作,只需使用

	$ libwebsockets-test-client localhost --ssl

  默认情况下,客户端测试小程序设置为接受测试服务器使用的自签名证书,这由设置为2use_ssl变量表示。将其设置为1以拒绝没有可信CA证书的任何服务器证书。

使用websocket ping实用程序

  libwebsockets-test-ping作为客户端连接到远程websocket服务器,并像普通的unix ping实用程序一样对其进行ping。

	$ libwebsockets-test-ping localhost
	handshake OK for protocol lws-mirror-protocol
	Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data.
	64 bytes from localhost: req=1 time=0.1ms
	64 bytes from localhost: req=2 time=0.1ms
	64 bytes from localhost: req=3 time=0.1ms
	64 bytes from localhost: req=4 time=0.2ms
	64 bytes from localhost: req=5 time=0.1ms
	64 bytes from localhost: req=6 time=0.2ms
	64 bytes from localhost: req=7 time=0.2ms
	64 bytes from localhost: req=8 time=0.1ms
	^C
	--- localhost.localdomain websocket ping statistics ---
	8 packets transmitted, 8 received, 0% packet loss, time 7458ms
	rtt min/avg/max = 0.110/0.185/0.218 ms
	$

  默认情况下,它使用04 PING分组操作码类型发送64字节有效载荷分组。您可以使用-s=标志更改有效载荷大小,04标准规定的最大值为125。
  使用测试服务器提供的lws-mirror协议,libwebsockets-test-ping还可以使用更大的有效负载大小,最大可达4096个二进制数据包;lws-mirror会将它们复制回客户端,并显示为PONG。使用-m标志选择此操作。
  ping之间的默认间隔为1s,您可以使用-i=标志来设置该间隔,包括10ms间隔的-i=0.01等分数。
  在您甚至可以使用标准中的PING操作码之前,您必须使用指定的协议完成握手。默认情况下,使用测试服务器支持的 lws-mirror-protocol。但是,如果您在另一台服务器上使用它,可以通过--protocol=protocolname指定握手协议。

碎片测试应用程序

  默认情况下,它以服务器模式运行

	$ libwebsockets-test-fraggle
	libwebsockets test fraggle
	(C) Copyright 2010-2011 Andy Green <andy@warmcat.com> licensed under LGPL2.1
	 Compiled with SSL support, not using it
	 Listening on port 7681
	server sees client connect
	accepted v06 connection
	Spamming 360 random fragments
	Spamming session over, len = 371913. sum = 0x2D3C0AE
	Spamming 895 random fragments
	Spamming session over, len = 875970. sum = 0x6A74DA1
	...

  您需要在客户端模式下运行第二个会话,您必须至少提供-c开关和服务器地址:

	$ libwebsockets-test-fraggle -c localhost
	libwebsockets test fraggle
	(C) Copyright 2010-2011 Andy Green <andy@warmcat.com> licensed under LGPL2.1
	 Client mode
	Connecting to localhost:7681
	denied deflate-stream extension
	handshake OK for protocol fraggle-protocol
	client connects to server
	EOM received 371913 correctly from 360 fragments
	EOM received 875970 correctly from 895 fragments
	EOM received 247140 correctly from 258 fragments
	EOM received 695451 correctly from 692 fragments
	...

  碎片测试在单个消息中发送最多1024个碎片化的网络套接字帧,每个随机大小在1到2001字节之间,然后发送校验和,并开始发送新的随机大小的碎片化消息。
  fraggle测试客户端接收相同的消息片段,并使用websocket帧计算相同的校验和,以查看消息何时结束。然后,它接受服务器校验和消息,并将其与校验和进行比较。

代理支持

   ws://wss://的客户端连接代码都遵守http_proxy环境变量。它不支持身份验证。
   你这样使用它

	$ export http_proxy=myproxy.com:3128
	$ libwebsockets-test-client someserver.com

调试记录

  默认情况下,对stderr启用严重性“notice”、“warn”或“err”的日志记录。
  默认情况下,编译其他日志,但禁止打印。
  默认情况下,严重性低于“注意”的调试日志不会编译。要将其包括在内,请在CMAKE中添加此选项

	$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG

  如果您想查看更详细的调试日志,可以使用lws_set_log_level()api控制一个位字段来选择哪些日志类型可以打印,在测试应用程序中,您可以使用-d <number>来控制这一点。可用的日志记录类型有(或将数字一起选择多个)

  • 1 ERR
  • 2 WARN
  • 4 NOTICE
  • 8 INFO
  • 16 DEBUG
  • 32 PARSER
  • 64 HEADER
  • 128 EXTENSION
  • 256 CLIENT
  • 512 LATENCY

Websocket版本支持

  客户端和服务器都支持最终的IETF标准,协议版本13。

延迟跟踪

  由于libwebsockets使用poll()和单线程方法运行,因此来自系统调用的任何意外延迟都是坏消息。现在有一个延迟跟踪方案,可以在配置时内置--with latency,记录系统调用完成所需的时间,以及整个操作是否在该时间内完成或延迟。
  您可以通过启用日志记录级别512(例如,测试服务器上的-d 519)来查看详细数据,以查看该日志和通常的日志),但是,即使没有该级别,也会保留“最差”延迟,并在上下文被破坏时将其报告给具有NOTICE严重性的日志。
  如果操作完成,则需要小心解释它们,第一个数字(在我们中)是整个操作所用的时间,这可能已通过轮询循环重试多次,并取决于网络往返时间。这里的高数字并不表示有问题。我们在日志中“lat”之后报告的数字是这一特定尝试所花费的时间。这里的高数字可能表示存在问题,或者如果您的系统当时加载了另一个应用程序,例如浏览器,则可能只是表示操作系统在调用期间对另一个程序给予了优惠待遇。

Autobahn测试套件

  Lws可以针对 autobahn websocket fuzzer进行测试。

  1. pip install autobahntestsuite

  2. wstest -m fuzzingserver

  3. 像这样运行测试

libwebsockets-test-echo --client localhost --port 9001 -u “/runCase?case=20&agent=libwebsockets” -v -d 65535 -n 1

(this runs test 20)

  1. 打开浏览器,访问

http://localhost:8080/test_browser.html

fill in “libwebsockets” in “User Agent Identifier” and press “Update Reports (Manual)”

  1. 在浏览器中,转到运行wstest的目录查看结果(例如/projects/libwebsockets)。

file:///projects/libwebsockets/reports/clients/index.html

Autobahn测试说明

  1. Autobahn测试用户代码+lws实现。因此,要获得相同的结果,您需要在用户实现方面遵循test-echo.c 。
  2. 其中两个测试对于Libwebsockets来说没有意义,我们无法支持它们。
      测试2.10+2.11:在一个连接上发送多个ping。Lws策略是只允许在每个连接上运行一个活动ping,其余的将被丢弃。autobahn测试本身承认这不是标准的一部分,只是一些人对他们认为ws服务器应该如何工作的随机看法。因此,我们将在设计上失败,符合RFC6455是没有问题的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值