const 发布的文章

“const”

TCP_NODELAY is option given to setsockopt system call:

#include <netinet/tcp.h>

int yes = 1;
int result = setsockopt(sock,
                        IPPROTO_TCP,
                        TCP_NODELAY,
                        (char *) &yes, 
                        sizeof(int));    // 1 - on, 0 - off
 if (result < 0)
      // handle the error

This is to set Nagle buffering off. You should turn this option on only if you really know what you are doing.

tcp_nodelay

服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。

一个 POST 请求通常是通过 HTML 表单发送,并返回服务器的修改结果。在这种情况下,content type 是通过在 <form> 元素中设置正确的 enctype 属性,或是在 <input> 和 <button> 元素中设置 formenctype 属性来选择的:

application/x-www-form-urlencoded
数据被编码成以 '&' 分隔的键 - 值对,同时以 '=' 分隔键和值。非字母或数字的字符会被 percent-encoding: 这也就是为什么这种类型不支持二进制数据 (应使用 multipart/form-data 代替).
multipart/form-data
text/plain

enctype
当 method 属性值为 post 时,enctype 就是将表单的内容提交给服务器的 MIME 类型 。可能的取值有:

application/x-www-form-urlencoded:未指定属性时的默认值。
multipart/form-data:当表单包含 type=file 的 <input> 元素时使用此值。
text/plain:出现于 HTML5,用于调试。

application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data。

这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。
上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 <form> 表单也只支持这两种方式(通过 <form> 元素的 enctype 属性指定,默认为 application/x-www-form-urlencoded。其实 enctype 还支持 text/plain

application/json

POST http://www.example.com HTTP/1.1 
Content-Type: application/json;charset=utf-8

{"title":"test","sub":[1,2,3]}

text/xml

POST http://www.example.com HTTP/1.1 
Content-Type: text/xml

<?xml version="1.0"?>
<methodCall>
    <methodName>examples.getStateName</methodName>
    <params>
        <param>
            <value><i4>41</i4></value>
        </param>
    </params>
</methodCall>

受访专家/广州中医药大学第一附属医院胸外科主任 王继勇副教授

进入三伏,酷热难耐,出汗在所难免。可是我们身边有些朋友,即使坐在空调房里也大汗淋漓;有的则稍微一动就出汗;有的白天出汗不多,晚上睡觉时 却会汗湿几件睡衣……广州中医药大学第一附属医院胸外科主任王继勇副教授介绍说,由于个人体质不同,汗多汗少会有差异,不同情况、不同部位的出汗,是可以 透露出身体信号的。

坐着不动也出汗or稍微一动就大汗

提示信号:气虚

有些人坐着不动都会出大汗或者稍微运动就大汗淋漓,有此症状多是因为气虚。王继勇主任介绍说,中医认为“气固体表”,能“摄血摄汗液”,气足, 则像磁铁一样吸引住汗液,让它不往外泄;气虚,则失去牵引力,汗液止不住地往外流。所谓出“虚汗”,原因就在于此。一般来说,气虚源于身体状况差,像先天 不足或后天过度劳累、久病、反复吃药损伤身体等,都会导致气虚。而这类人的表现也比较典型,除了猛出汗,还常常感觉疲倦、懒言,比较安静。

建议:对于这部分人群,在夏季除了要多喝水以外,可以在中医师的指导下多吃些补气的东西,比如党参、北芪、太子参、西洋参、高丽参。易上火人群 宜选用太子参、西洋参,煮水泡茶喝。泡茶时每人的用量是太子参15克或西洋参15克。同时,也可以拿二者分别同鸭肉或兔肉一起煲汤。之所以与鸭肉或兔肉搭 配,主要是二者均有养阴之功效,因为出汗过多易使身体丢失过多的阴液。

身体底子差或寒性体质的人,有脾阳虚的症状(例如容易腹胀、便溏、拉肚子),则可选用党参或高丽参,在用法或用量上与食用太子参或西洋参相同。

睡着易出汗,多为“盗汗”

提示信号:阴虚火旺

气虚的人往往是“自汗”(即在清醒状态下,动或不动都出很多汗),不同的是,有一些人往往是晚上睡觉时,特别是睡着后猛出汗,有时甚至一夜要汗 湿两三件睡衣,这种情况叫做“盗汗”,以阴虚火旺的人最为多见。这类人常常晚上睡不好,还有口干舌燥、喉咙干痛、声音嘶哑、大便干结等症状。

建议:阴虚火旺的人在夏季可以用西洋参来调理,如用西洋参片泡水喝,还可以服用知柏地黄丸。饮雪耳糖水、生地花生猪脚汤也有滋阴清热的作用。

阴虚火旺的人不要吃上火的食物。阴虚火旺的人容易发脾气,要多做一些让自己身心放松的事情,像听音乐、看书、画画、外出旅游、与朋友聚会等,还可以抽空做做推拿、拔火罐,疏解身体的紧张,这样也能让心情变得好起来。

手心常常汗淋淋

提示信号:手汗症

我们常有这样的说法,“紧张得手心都出汗了”。对于大多数人来说,当心情放松后,手心的汗就消退了,或在衣服上擦擦就没了。可对于有些人来说, 手心总是汗淋淋的,严重的甚至还滴水,他们因此不敢和人握手,在社交场合会更加紧张,而这种紧张又会加重出汗,这就叫做“手汗症”了。

王继勇介绍,手汗症在医学上属于局限性多汗症的范畴,是因局部交感神经损伤或异常生理反应所致,例如精神紧张、情绪激动、压力大、烦躁、焦虑, 使神经冲动增多,神经过度亢奋,就会导致手掌的小汗腺排汗异常增加。手汗症在亚洲人中的发病率较高,约为4.36%,即100个人里面就有四五个手汗症患 者。

建议:手汗症的治疗分内科药物治疗及外科手术治疗两种。内科药物治疗主要使用的是抑制交感神经的药物,但常会有口干舌燥或肠胃障碍等副作用发 生,使人不敢长期服用。外科手术方法主要是将胸交感神经神经进行切断。王继勇介绍,该手术只需在腋下切开直径仅0.5厘米的小切口,通过电视胸腔镜技术切 断胸交感神经即可,耗时只需十几分钟。手汗症治疗的最佳时期是青春期,此时症状最为明显,手术后可以解除手掌多汗的症状。

应季提醒

夏季,别把出汗当“大敌”

夏季天气炎热,出汗在所难免。可有些人痛恨出汗,恨不得一天24小时都待在空调房里。其实,夏季适当出些汗对身体是很有益处的。

据王继勇介绍,出汗是人体排泄和调节体温的方式,当我们觉得热的时候,或者在做运动的过程中,出汗是正常现象。正常的出汗有利于身体健康,出汗能够调动全身器官,改善循环。在中医看来,适当出汗还能有助于排出体内的湿邪和热毒,人也变得精神抖擞。

1. Create CA Key Pair
Run as administrator the following command:

openssl genrsa -out m2mqtt_ca.key 2048

2. Create CA Certificate
Next I’m creating a certificate for the CA, using the key pair I have created in step 1:

openssl req -new -x509 -days 3650 -key m2mqtt_ca.key -out m2mqtt_ca.crt

3. Create Mosquitto Broker Key Pair
Next, I’m creating a private key for the server (m2mqtt_srv.key) with:

openssl genrsa -out m2mqtt_srv.key 2048

4. Create Certificate Request from CA
That key we need to be certified, so we create a certificate request for it, and the certificate needs to be signed by the CA:

openssl req -new -out m2mqtt_srv.csr -key m2mqtt_srv.key

5. Verify and Sign the Certificate Request
The last step is to sign the server request through the CA to get the broker certificate:

openssl x509 -req -in m2mqtt_srv.csr -CA m2mqtt_ca.crt -CAkey m2mqtt_ca.key -CAcreateserial -out m2mqtt_srv.crt -days 3650

文件清单

m2mqtt_ca.crt : CA Certificate
m2mqtt_ca.key : CA key pair (private, public)
m2mqtt_ca.srl : CA serial number file
m2mqtt_srv.crt : server certificate
m2mqtt_srv.csr : certificate sign request, not needed any more
m2mqtt_srv.key : server key pair

将证书和密钥文件复制到下面目录
/etc/mosquitto/certs
最后目录内容应该类似这样
/etc/mosquitto/certs/m2mqtt_ca.crt
/etc/mosquitto/certs/m2mqtt_srv.crt
/etc/mosquitto/certs/m2mqtt_srv.key

修改/etc/mosquitto/mosquitto.conf配置文件
默认端口号

port 8883

指定证书文件与路径信息

#capath
cafile /etc/mosquitto/certs/m2mqtt_ca.crt

# Path to the PEM encoded server certificate.
certfile /etc/mosquitto/certs/m2mqtt_srv.crt

# Path to the PEM encoded keyfile.
keyfile /etc/mosquitto/certs/m2mqtt_srv.key

# This option defines the version of the TLS protocol to use for this listener.
# The default value allows v1.2, v1.1 and v1.0, if they are all supported by
# the version of openssl that the broker was compiled against. For openssl >=
# 1.0.1 the valid values are tlsv1.2 tlsv1.1 and tlsv1. For openssl < 1.0.1 the
# valid values are tlsv1.
tls_version tlsv1.2

配置文件最终结果

 cat /etc/mosquitto/conf.d/tls.conf 

port 8883
cafile /etc/mosquitto/certs/m2mqtt_ca.crt
certfile /etc/mosquitto/certs/m2mqtt_srv.crt
keyfile /etc/mosquitto/certs/m2mqtt_srv.key
tls_version tlsv1.2

运行测试

mosquitto -c mosquitto.conf -v

systemd服务查看

sudo systemctl status mosquitto

● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
Loaded: loaded (/etc/init.d/mosquitto; generated)
Active: active (running) since Wed 2022-10-19 09:53:21 CST; 2min 32s ago

sudo vim /etc/init.d/mosquitto

Change /bin/sh to /bin/bash for fixing "ulimit -u illegal option" error

set_ulimit () {

ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 1048576
ulimit -m unlimited
ulimit -u 1048576

}

start)

...
# Update ulimit config in start command
set_ulimit
...
;;

stop)

After changed the config, reload systemctl config and restart mosquitto

sudo systemctl daemon-reload
sudo service mosquitto stop
sudo service mosquitto start

https://stackoverflow.com/questions/40199152/mosquitto-increase-max-connections