06、HSMS协议介绍
本章的内容主要参考了 SECS半导体设备通讯-2 HSMS通信标准 ,外加上自己看的一些其他的文档。也加上了一些自己的理解,特此记录。若有侵权,请联系删除,谢谢。
再次特别感谢 SECS半导体设备通讯-2 HSMS通信标准 的作者。
1、HSMS通信标准概述
HSMS 定义了使用 TCP/IP 作为物理传输媒质时的通信接口。
HSMS 使用TCP/IP流支持,提供了可靠的双向同步传输,可以用来作为SECS-I通信以及其他更高级的通信环境的替代。
1.1 HSMS连接状态图
HSMS状态机如下图所示,此图中描述的行为定义了HSMS的基本要求。

状态图说明:
- NOT CONNECTED:该实体已准备好侦听或启动TCP/IP连接,但尚未建立任何连接,或所有以前建立的TCP/IP连接都已终止;
- CONNECTED:已建立了一个TCP/IP连接。此状态有两个子状态,NOT SELECTED 和 SELECTED;
- NOT SELECTED:未建立HSMS会话或任何先前建立的HSMS会话已结束;
- SELECTED:至少建立了一个HSMS会话,这是HSMS的通常操作状态:数据消息可以在此状态下进行交换。
状态的转换:

2、使用TCP/IP
TCP应用程序接口(API)的规范不在HSMS的范围之内。
HSMS可以使用任何标准 TCP/IP API 进行开发,比如 BSD Socket、TLI 等。使用标准的 TCP/IP 寻址,默认的端口号为 5000。
2.1 TCP/IP网络寻址约定
IP Address:连接到局域网(LAN)的每个物理TCP/IP连接都必须具有唯一的IP地址。IP地址必须在安装时进行可分配,并且HSMS的实现不能选择一个固定的IP地址。一个典型的IP地址是192.9.200.1。
TCP Port Numbers:HSMS的实现应该允许将TCP端口配置为所使用的TCP/IP 实现的全部范围。一个典型的TCP端口号为5000。
上面这段话的意思是 HSMS 可以使用的端口号并没有什么特别的要求,TCP/IP 可以使用的都可以。
2.2 建立TCP/IP连接
HSMS将通信实体分为两种,Passive Mode(被动模式)和 Active Mode(主动模式)。
- PassiveMode:处于
被动模式的本地实体侦听并接受由处于主动模式的远程实体发起的连接。 - ActiveMode:由处于
主动模式的本地实体发起连接。
上面这两句话是不是有点绕,简单理解就是 Passive Mode 是服务端,Active Mode 是客户端。服务端监听端口并接受请求,客户端主动发送请i去。

被动模式建立连接过程:
- 获取一个连接端点,并将其绑定到指定的的端口。
- 从端口监听从远程实体发送的连接请求。
- 在收到连接请求后,确认它并表示接受该连接。
其实上面就是使用 TCP 协议,编写服务端那一套,依次执行
bind(),listen(),accept()方法,然后坐等客户端的连接请求。
主动模式建立连接过程:
- 获取一个连接端点。
- 向远程实体(被动模式)所指定的端口发起连接。
- 等待远程实体确认收到并接受连接请求。
2.3 终止TCP/IP连接
连接终止是连接建立的逻辑反转。从本地实体的角度来看,TCP/IP连接可能随时断开。但是,HSMS只允许在连接处于连接状态的未选择子状态时终止连接。
最后一句话怎么理解?还记得上面说的HSMS连接状态图吗,这句话的意思是只有处于
NOT SELECTED这个状态时才可以终止连接。那处于SLECTED的状态不可以终止连接吗,我的意思是可以,但是需要先进入到NOT SELECTED状态,再终止连接。
任何一个实体都可以启动终止连接。实体进入Not Connected状态,表示HSMS通信结束。
3、HSMS消息交换过程
HSMS定义了跨TCP/IP连接的实体之间的所有消息交换过程。
一旦连接建立,这两个实体间就建立起HSMS通信。然后,数据消息可以在任何时候以任意一个方向进行交换。
当实体希望结束HSMS通信时,将使用 Deselcet 或 Separate procedure 来结束HSMS通信。
3.1 发送和接收HSMS消息
所有的HSMS过程都涉及到HSMS消息的交换。这些消息以 TCP/IP 流的形式使用先前建立的TCP/IP连接进行发送和接收。
3.2 消息交换过程
消息交换过程分为:
- Select Procedure
- Data Procedure
- Deselect Procedure
- Linktest Procedure
- Separate Procedure
- Reject Procedure
3.3 建立 Select Procedure
Select Procedure 用于使用Select.req和Select.rsp消息在TCP/IP连接上建立HSMS通信。
Select.req和Select.rsp消息:
实体由 Not Selected 状态转换为 Selected 状态所使用的消息 (Active Entity 发送Select.req);

Initiator的发起过程:
1. Initiator将Select.req消息发送给Responding Entity;
2. 如果Initiator接收到一个Select Status为0的 Select.rsp,则Select Procedure过程成功完成,实体由 Not Selected 状态转化为 Selected 状态;
3. 如果Initiator接收到Select Status不为0的Select.rsp,则Select Procedure失败,实体没有状态转换。
Responding Entity的响应过程:
1. 响应实体会收到Select.req;
2. 如果响应实体能够转换为Selected ,它将发送一个Select Status为0的Select.rsp;
3. 如果响应实体不能够转换为Selected,它将发送一个Select Status不为0的Select.rsp;
同时进行的Select Procedure:
如果附加标准没有限制选择使用哪种方式,则有可能两个实体同时启动具有相同控制标识的Select Procedure。在这种情况下,每个实体将通过使用Select.rsp响应来接受其他实体的选择请求。

一次建立连接的通信交互流程:

3.4 Data Procedure
只要连接处于 Selected 状态,任何一个实体都可以发起HSMS数据消息。当不处于 Selected 状态时,接收数据消息将导致拒绝 Reject Procedure。
数据消息可以进一步定义为消息事务的一部分,即Primary Message 或 Reply Message。
在消息事务中,事务的发起者向响应实体发送一条Primary Message。如果Primary Message指示需要响应,则响应实体将发送 Reply Message 响应。
下图为两种类型的消息事务:需要回复的消息事务 和 不需要回复的消息事务

这些事务的具体过程由应用层确定,并服从其他标准(例如,使用SECS-II编码消息的GEM设备的E5和E30)。
适用的上层标准由消息类型来标识。该类型由HSMS定义的特定格式确定。HSMS消息的正常类型是SECS-II文本。
3.5 Deselect Procedure
Delesect Procedure 用于在断开TCP/IP连接之前,为一个实体提供一个优雅的HSMS通信终止。
HSMS要求使用该Procedure时连接处于Selected状态。
Deselect.req/Deselect.rsp:
在双方协议终止通信时使用,发起通信终止的一端发送Deselect.req

Initiator的发起过程:
1. Initiator将Deselect.req消息发送给Responding Entity;
2. 如果Initiator接收到一个Deselect Status为0的Delect.rsp,则Deselect Procedure过程成功完成,实体由 Selected 状态转化为 Not Selected 状态;
3. 如果Initiator接收到Deselect Status不为0的Deselect.rsp,则Deselect Procedure失败,实体没有状态转换。
4. 如果在收到Deselect .rsp之前T6超时了,则认为发生了通信故障。
Responding Entity的响应过程:
1. 响应实体会收到Deselect.req;
2. 如果响应实体处于Selected状态且允许Deselect ,它将发送一个Deselect Status为0的Deselect.rsp,Delesect Procedure成功,发生状态更改;
3. 如果响应实体不允许Deselect,或者因为它没有处于Selected状态,或者因为本地条件不允许Deselect,它将发送一个Deselect Status不为0的Deselect.rsp进行响应。Delesect Procedure失败,不发生状态更改。
同时进行的Deselect Procedure:
如果附加标准不限制选择使用的 Deselect,则有可能两个实体同时使用相同的控制Id启动 Deselect Procedures。在这种情况下,每个实体将通过使用despelect.rsp响应来接受另一个实体的取消选择请求。

3.6 Linktest Procedure
Linktest Procedure 用于确定TCP/IP和HSMS通信的操作完整性。它的使用在CONNECTED状态下随时有效。
Linktest.req/Linktest.rsp:
用于通信状态的确认, 如果没有应答则转换为Not Connected 状态;

Initiator的发起过程:
1. Initiator将Linktest.req消息发送给Responding Entity;
2. 如果Initiator在T6超时时间内接收到一个Linktest.rsp,Linktest Procedure成功完成;
3. 如果在T6超时时间内未收到Linktest.rsp,则视为通信故障。
Responding Entity的响应过程:
1. 响应实体接收到Linktest.req;
2. 响应实体发送Linktest.rsp。
3.7 Separate Procedure
Separate Producure 用于在断开TCP/IP连接之前突然终止实体的HSMS通信。
HSMS要求在使用分离时连接处于SELECTED状态。响应实体不发送响应,无论其本地状态如何,都需要终止通信。该过程如下:

Initiator Procedure:
发起者处于 selected 状态才可以发起 Separate.req 消息请求 响应实体。当发起者发送了 Separate.req 后,就意味着发起者的 Separate Procedure 已经完成,发起者进入 NOT SELECTED 状态。
Responding Entity Procedure:
1.响应实体接收到 Separate.req。
2.如果响应实体处于 SELECTED 状态,则 Separate Procedure 可以成功的处理。
3.如果响应实体不处于 SELECTED 状态,则 Separate.req 请求被忽略。
3.8 Reject Procedure
Reject Procedure 用于响应在不适当的上下文中收到的其他有效的HSMS消息。当使用 HSMS 通行时,支持 Reject Procedure 提供了有用的诊断信息在分布式应用程序的生产环境中

Initiator (Sender of Inappropriate Message) Procedure:
发起者发送了一个不恰当的消息给到响应实体,响应实体会 回复一个 Reject.req,当发起者收到 Reject.req 后,需要采取恰当的措施
Responding Entity Procedure:
响应实体收到了一个不恰当的消息,会回复一个 Reject.req消息给 发起者。
HSMS 要求,当响应实体处于 NOT SELECTED状态或者接收到未为该实体定义的 SType or PType 类型的消息时,需要当作 reject procedure 处理。附加标准可定义需要当作 reject procedure 的其他条件。一般来说,接收拒绝消息是配置不当的系统或软件编程错误的指示。
4、 HSMS消息格式
4.1 General Message Format 一般消息格式
4.1.1 Byte Structrue:
在HSMS中一个字节包含8位。字节中的位从第7位(MSB)编号到第0位(LSB)。
4.1.2 Message Format:
HSMS消息以单个连续字节流传输。
HSMS Message Format :
| Number of Bytes | Description |
|---|---|
| 4 Bytes | Message Length. MSB First. Specifies the number of bytes in the Message Header plus the Message Text. |
| 10 Bytes | Message Header. |
| 0–n Bytes | Message Text. Format is further specified by PType field of message header. |
大端模式和小端模式是指在多字节数据存储时,字节的顺序不同。在大端模式中,高位字节存储在低地址,低位字节存储在高地址;而在小端模式中,低位字节存储在低地址,高位字节存储在高地址。
MSB(Most Significant Bit)是指最高位的比特位,它与大、小端模式的关系是:在大端模式中,MSB位于第一个字节的最高位;而在小端模式中,MSB位于最后一个字节的最高位。
所以 HSMS 采用的是大端模式
4.1.3 Message Length:
Message Length是一个四字节的无符号整数值,它指定Message Header加上Message Text的字节长度。消息长度首先传输最高有效位(MSB),最后传输最低有效位(LSB)。
最小可能的消息长度为10(当只有Header时)。最大可能的消息长度跟具体实现有关。
4.1.4 Message Header:
MessageHeader是一个10字节的字段。头中的字节从第0字节(传输的第一个字节)编号到第9字节(传输的最后一个字节)。
HSMS Message Header :
| Bytes | Description |
|---|---|
| 0-1 | Session ID (Device ID) |
| 2 | Header Byte 2 |
| 3 | Header Byte 3 |
| 4 | PType |
| 5 | SType |
| 6-9 | System Bytes |
其中:
Session ID:
16位无符号整数,它占据了字节0和字节1(字节0是MSB,1是LSB)。用于标识通信实体的连接;Header Byte 2:对于不同的HSMS消息,有不同的取值;
Header Byte 3:对于不同的HSMS消息,有不同的取值;
PType:
8位无符号整型,PType旨在作为一种枚举类型,定义表示层消息类型:MessageHeader和MessageText是如何编码的。只有 PType = 0,被HSMS定义为表示SECS-II消息编码。
PType:
| Value | Description |
|---|---|
| 0 | SECS-II Encoding |
| 1-127 | Reserved for subsidiary standards |
| 128-255 | Reserved, not used |
- SType:
8位无符号整数,是一种枚举类型,标识此消息是HSMS数据消息(值=0)还是HSMS控制消息。
SType:
| Value | Description |
|---|---|
| 0 | Data Message |
| 1 | Select.req |
| 2 | Select.rsp |
| 3 | Deselect.req |
| 4 | Deselect.rsp |
| 5 | Linktest.req |
| 6 | Linktest.rsp |
| 7 | Reject.req |
| 8 | (not used) |
| 9 | Separate.req |
| 10 | (not used) |
| 11–127 | Reserved for subsidiary standards |
- SystemBytes:四字节无符号整数,用于在一组开放的事务中唯一地标识一个事务,即唯一地标识一次消息交互。
4.2 HSMS Message Formats by Type 按类型划分的HSMS消息格式
这是一个HSMS消息的格式。每条消息都以一个 Message Length, 开始,然后是一个 Message Header,后面是 Message Text。

Message Length : 是一个四字节的值,它定义了整个HSMS消息的长度 (Message Header + Message Text).
Message Header: 描述HSMS消息或过程。
Message Text: 是HSMS消息的数据部分。它只与数据程序相关。消息文本中的数据是在SECS-II消息协议部分中描述的已编码的SECS-II。
HSMS消息中的Header的解释取决于由SType字段的值定义的特定HSMS消息类型。
下表总结了定义的完整消息集,PType = 0(SECS-II消息格式)。

4.2.1 SType=0 DataMessage
使用SType=0来标识HSMS消息以发送DataMessage。
HSMS Message Length 最少为10(Message Header的长度)。
其 Byte 2 的组成如下图,它标识消息是否需要应答。

Byte 2:
W-Bit指示Primary Message是否需要Reply Message,期望应答则设置为1,不期望应答则设置为0。Reply Message应该始终将W位设置为0。Header Byte 2的低阶7位(第6-0位)包含该消息的SECS流。流是一个7位无符号整数值,它标识消息的一个主要话题,它的使用在SEMI E5(SECS-II)中定义。Byte 3: 包含该消息的SECS功能。功能是一个8位的无符号整数值,用于标识消息的一个次要话题(在流中),它的使用在SEMI E5(SECS-II)中定义。
Byte3 的 bit 0定义数据消息是“Primary”还是“Reply”;值1表示“Primary”,值0表示“Reply”。PType: 为0 表示 SECS-II编码格式。
System Bytes:唯一地标识此消息事务,ReplyMessage 的 SystemBytes 应与其对应回复的Prymary Message的 SystemBytes 相同。
4.2.2 SType=1 Select.req
Message Length为10,因为该消息仅有Header。
直接看图就知道各个字节应该怎么写。
4.2.2 SType=2 Select.rsp
Message Length为10,因为该消息仅有Header。
其SessionID:必须等于相应的Select.req中的SessionID。
其Byte3:表示SelectStatus。为0表示操作成功,非0表示失败。
4.2.3 SType=3 Deselect.req
Message Length为10,因为该消息仅有Header。
4.2.4 SType=4 Deselect.rsp
Message Length为10,因为该消息仅有Header。
- 其Byte3:表示DeselectStatus。为0表示操作成功,非0表示失败。
4.2.5 SType=5 Linktest.req
Message Length为10,因为该消息仅有Header。
- 其SessionID:为0xFFFF。
4.2.6 SType=6 Linktest.rsp
Message Length为10,因为该消息仅有Header。
其SessionID:为0xFFFF。
其System Bytes:与其对应回复的Linktest.req相同。
4.2.7 SType=7 Reject.req
用于响应接收到消息的接收方不支持或当时无效的任何有效的HSMS消息。
其SessionID:等于被拒绝的消息中的SessionID的值。
其Byte2:如果PType不受支持,它等于被拒绝的消息中的PType。否则,它将等于被拒绝的消息中的SType的值。
其Bytes3:其值为reason code,表示拒绝的原因。
ReasonCode :
| Value | Description |
|---|---|
| 1 | SType Not Supported. A message was received whose SType value not defined in the HSMS standard or the particular subsidiary standard(s) supported by the entity. (不支持SType。收到一条消息,其SType值未在该实体支持的HSMS标准或特定附属标准中定义)。 |
| 2 | PType Not Supported. As above, but for PType. (不支持PType。原因同上) |
| 3 | Transaction Not Open. A Response control message was received when there was no outstanding request message which corresponded to it. (事务未打开。当没有与之对应的未完成的请求消息时,就会收到一条响应控制消息。) |
| 4 | Entity Not Selected. A data message was received when not in the SELECTED state. (实体 处于 Not Selected。当未处于 SELECTED state 时,接收到一条数据消息。) |
| 5-127 | Reserved for subsidiary standard-specific reasons for reject. (保留为附属标准特定的拒绝原因。) |
| 128-255 | Reserved for local entity-specific reasons for reject. |
4.2.8 SType=9 Separate.req
使用SType为9的HSMS消息用于立即终止HSMS通信。除了SType值外,它与Deselect.req消息相同。其目的是立即终止HSMS通信。
5、 特别说明
如果检测到通信故障,实体应终止TCP/IP连接。在连接终止时,可以尝试重新建立通信。
5.1 回复超时 T3
Reply Timeout:定义一个实体等待回复消息的最长时间,如果T3超时则取消这次会话事务但不断开 TCP/IP 连接。
5.2 连接间隔时间 T5
Connect Separation Time:定义两个连接请求之间的时间间隔。
频繁的向一个未准备好连接的实体发起连接请求,会加重 TCP/IP 的操作负荷。
因此,当一个主动模式实体发起的连接操作终止后(不论是成功结束还是被远端实体拒绝),该实体必须等待 T5 时间再后发起下一次连接请求。
5.3 控制事务超时 T6
Control Transactions Control Timeout:定义了一个控制事务所能保持开启的最长时间,超过该时间就认为这次通信失败。
许多控制消息是消息交换或事务过程的一部分:发送者发送<xx>.req,接收方接收<xx>.req并以<xx>.rsp作为响应。
从发送所需的请求消息到收到响应消息,事务一直被认为是打开的。
控制事务可能保持打开的时间取决于T6。
在发起控制事务时,本地实体应启动一个持续时间等于T6的计时器。如果事务在计时器到时之前被正确关闭,则应该取消计时器。
如果定时器在事务未结束之前就到时了,则该事务应被发起者视为已结束,并被视为HSMS通信失败。
5.4 未选择状态超时 T7
Not Selected Timeout :定义当建立了 TCP/IP 连接之后通信处于 Not Selected 状态的最长时间,通信必须在该时间完成 Selected Procedure,否则将会断开 TCP/IP 连接。
5.5 网络字符超时 T8
Network Intercharacter Timeout:定义成功接收到单个HSMS 消息的字符之间的最大时间间隔。
因为TCP/IP是面向流的通信,所以所有作为单个HSMS消息的一部分的字节可能在单独的TCP/IP消息中传输,一个 HSMS 通信消息可能被分为若干个 TCP/IP 消息进行传输。
若 T8 超时则认为这次传输失败。
6、 HSMS的实现要求
HSMS的实现必须提供以下参数设置。
所有参数的范围和分辨率必须至少如表中所示。所有参数必须存储方式为断电保留,如果电源故障或重新加载系统软件,应保留设置。
| Parameter Name | Value Range | Resolution | Typical Value | Description |
|---|---|---|---|---|
| T3 Reply Timeou | 1-120 seconds | 1 second | 45 seconds | Reply timeout. Specifies maximum amount of time an entity expecting a reply message will wait for that reply. |
| T5 Connect Separation Timeout | 1-120 seconds | 1 second | 10 seconds | Connection Separation Timeout. Specifies the amount of time which must elapse between successive attempts to connect to a given remote entity. |
| T6 Control Transaction Timeout | 1-120 seconds | 1 second | 5 seconds | Control Transaction Timeout. Specifies the time which a control transaction may remain open before it is considered a communications failure. |
| T7 NOT SELECTED Timeout | 1-120 seconds | 1 second | 10 seconds | Time which a TCP/IP connection can remain in NOT SELECTED state (i.e., no HSMS activity) before it is considered a communications failure. |
| T8 Network Intercharacter Timeout | 1-120 seconds | 1 second | 5 seconds | Maximum time between successive bytes of a single HSMS message which may expire before it is considered a communications failure. |
| Connect Mode | PASSIVE, ACTIVE | ----- | ----- | Connect Mode. Specifies the logic this local entity will use during HSMS connection establishment. |
| Local Entity IP Address and Port number | determined by TCP/IP conventions | ----- | ----- | Required for any entity operating in PASSIVE mode. Determines the address on which the local entity will listen for incoming connection requests. |
| Remote Entity IP Address and Port Number | determined by TCP/IP conventions | ----- | ----- | Required for any entity operating in ACTIVE mode. Determines the address of the remote entity to which the local entity will attempt to connect. |
注意:上面显示的参数默认值为小型网络(10个或更少节点)。可能需要针对较大的网络配置来调整设置。
06、HSMS协议介绍的更多相关文章
- TCP/IP 协议介绍
转自http://blog.jobbole.com/104886/ 一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应 ...
- 第二章 ZAB协议介绍
ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息广播协议)是zookeeper数据一致性的核心算法. ZAB 协议并不像 Paxos 算法那样,是一种 ...
- JSON-RPC轻量级远程调用协议介绍及使用
这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...
- Java 集合系列 06 Stack详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
[转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 RTP ...
- Python基础教程之udp和tcp协议介绍
Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...
- 常用音频协议介绍&&有关音频编码的知识与技术参数
(转载)常用音频协议介绍 会议电视常用音频协议介绍及对比白皮书 一.数字化音频原理:声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线.通常人耳可以听到的频率在20 ...
- 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT_转
转自:各种开源协议介绍 BSD.Apache Licence.GPL V2 .GPL V3 .LGPL.MIT 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的 ...
- OSPF协议介绍及配置 (上)
OSPF协议介绍及配置 (上) 一.OSPF概述 回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加 ...
- VRRP协议介绍--转
http://www.cnblogs.com/jony413/articles/2697404.html VRRP协议介绍 参考资料: RFC 3768 1. 前言 VRRP(Virtual Rout ...
随机推荐
- KMP 自动机,孤独的自动机(同时也是CF1721E的题解)
给定字符串 \(s\),以及 \(q\) 个串 \(t_i\),求将 \(s\) 分别与每个 \(t_i\) 拼接起来后,最靠右的 \(|t_i|\) 个前缀的 border 长度.询问间相互独立. ...
- ElasticSearch可视化工具ElasticHD安装
ElasticHD两种安装方式 1.ElasticHD介绍 ElasticHD 支持 ES监控.实时搜索,Index template快捷替换修改,索引列表信息查看, SQL converts to ...
- Kafka + SpringData + (Avro & String) 【Can't convert value of class java.lang.String】问题解决
[1]需求:Kafka 使用 Avero 反序列化时,同时需要对 String 类型的 JSON数据进行反序列化.AvroConfig的配置信息如下: 1 /** 2 * @author zzx 3 ...
- NEFU-NSILAB2021选拔赛WriteUp
Web signin 打开看到源码: <?php highlight_file(__FILE__); $file = $_GET['file']; if ($file) { include $f ...
- AI工具导航
.xe-comment-entry img { float: left; display: block; background: rgba(136, 136, 136, 0.15); margin-r ...
- SimpleAdmin手摸手教学之:项目架构设计2.0
一.说明 在SimpleAdmin1.0版本中,我将整体项目结构分为三大块,分别为架构核心.业务模块和应用服务.随着1.0版本的封版,回去再看我之前的项目架构,也暴露了一些问题,比如在1.0版本中,S ...
- Django之数据库操作入门
目录 pycharm连接mysql数据库 pycharm与数据库图形化交互方式 pycharm后台连接数据库 django连接数据库报错 ORM简介 ORM建表 ORM入门之增删改查 ORM写数据 O ...
- python之爬虫二
10正则表达式 正则表达式(regular expression)是一种字符串匹配模式或者规则,它可以用来检索.替换那些符合特定规则的文本.正则表达式几乎适用于所有编程语言,无论是前端语言 JavaS ...
- [Web Server]Tomcat调优之SpringBoot内嵌Tomcat源码分析
以springboot:2.3.12.RELEASE中内嵌的tomcat-embed-core:9.0.46为例,进行分析 1 概述 1.0 关键依赖包 spring-boot-autoconfigu ...
- [Pytorch框架] 1.4 Autograd:自动求导
文章目录 Autograd: 自动求导机制 张量(Tensor) 梯度 Autograd: 自动求导机制 PyTorch 中所有神经网络的核心是 autograd 包. 我们先简单介绍一下这个包,然后 ...