新闻详情

新闻详情

首页 / 资讯中心 / 详情

UDS诊断P4Server参数详解:CAN与DoIP下NRC 0x78处理技巧

发布时间:2026/9/25 1:56:39来源:尧图网络
UDS诊断P4Server参数详解:CAN与DoIP下NRC 0x78处理技巧
做ECU诊断开发这些年我见过太多人把UDS的定时参数当成“配好就不用动”的静态配置。尤其是P4Server——这个连ISO 14229-1标准正文里都不直接出现的参数一旦遇到需要长时间处理的诊断请求Flash擦除、例程控制、刷写数据写入就成了悬在头顶的刀配置小了0x78发得太勤总线上全是“处理中”配置大了客户端可能已经P2*Server超时直接判定ECU无响应。更麻烦的是同样的P4Server在CAN总线上表现正常换到车载以太网DoIP上就出现各种古怪超时。今天这篇就把P4Server的来龙去脉、在CAN与以太网下的差异以及NRC 0x78处理实操技巧一次讲清楚。本文适合正在做UDS协议栈集成、诊断测试或刷写功能开发的工程师也适合刚接触UDS诊断、想搞懂定时参数的同学。1. P4Server到底是什么先把它从协议栈里拎出来1.1 标准里没有它但刷写和例程控制都绕不开它ISO 14229-1里定义的服务端时间参数大家最熟悉的是P2Server和P2*Server。P2Server是ECU收到诊断请求后到发出首条响应包括NRC响应的最大允许时间默认50msP2*Server是在ECU发送了NRC 0x78Response Pending之后整个延长处理时长的上限ISO默认5000ms。这两个参数一个管“多快给第一句回复”一个管“最晚能拖多久”。但标准并没有强制规定“ECU需要在处理期间每隔多久发一次0x78”。这个每隔多久的节奏就是P4Server干的事。P4Server通常出现在商用UDS协议栈和AUTOSAR DCM模块的配置项里用来控制服务器周期性发送NRC 0x78的间隔时间。我把项目里用到的配置项名列一下大家以后看到别懵有的叫P4Server有的叫ResponsePendingPeriodAUTOSAR DCM里对应DcmDspTimeP4Server之类的参数本质都是同一个东西——0x78重复周期的定时器。可以用一个生活化的类比理解你把材料递给办事窗口窗口说“你这个业务要审批请稍等”这个首次回复就是P2Server窗口每隔一分钟广播一次“业务仍在处理中”这个广播间隔就是P4Server窗口承诺“最多等5分钟一定给你结果”这个5分钟就是P2*Server。三个参数各管一段互相不能替代。1.2 最容易搞错的配置关系P4Server必须小于P2*Server我见过不止一个项目配置人员想当然地把P4Server和P2*Server设成同一个值结果ECU上电后每次执行长例程诊断仪都会报“接收响应超时”。原因很简单服务器在P2Server内发出了第一条NRC 0x78客户端收到后重置自己的P2*Server计时器但如果P4Server不小于P2*Server那么服务器还没发出第二条0x78客户端那边已经P2*超时了。严格说客户端在接收0x78后确实会重启P2*Server但ECU如果只在最后时刻发一条0x78等于把客户端置于“长时间没有输入”的状态绝大多数诊断仪的容错能力没你想的那么强。更合理的配置是让P4Server占P2*Server的1/4到1/2。比如P2*Server5000ms时P4Server取1000ms或2000ms都行。如果长例程最坏执行时长能到4000ms那P2*Server至少要留出2000ms以上的裕量P4Server取1500ms到2000ms比较稳。还有一点要提醒P2Server、P2*Server、P4Server这三个参数是应用层UDS层的跟你底层用的是CAN还是DoIP没有直接关系真正有关系的是下面要说的传输行为差异。2. CAN与以太网DoIP的底层差异如何牵动P4Server2.1 CAN上UDS的时序ISO-TP分段和总线仲裁是隐藏变量CAN经典帧一个数据帧最大才8字节去掉协议开销UDS应用层单包能塞下的数据很有限。诊断请求和响应一旦超过7字节就得走ISO 15765-2的多帧传输首帧FF、流控帧FC、连续帧CF一套流程。多帧传输过程中流控帧的STmin、BlockSize直接影响整包报文的完成时间。假设500kbps的总线一个标准CAN数据帧在总线上的物理发送时间大约0.26ms看起来和50ms的P2Server比可以忽略。但如果总线上同时跑着大量周期报文诊断报文仲裁优先级又不高那么0x78这个单帧很有可能会因为总线忙碌而排队。尤其在刷写场景ECU既要响应0x36这类数据写入请求又要向后端Flash写入数据诊断发送队列里还堆着上一轮请求的肯定或否定响应0x78被挤到队尾是常事。CAN上的P4Server实际表现更多取决于发送队列调度和总线负载而不是物理波特率。我做过一次对比测试总线负载30%时0x78的周期抖动在±5ms以内负载80%时抖动可以到几十毫秒甚至上百毫秒。所以你如果想在CAN上把P4Server配置卡得很紧比如1000ms一定要在最高总线负载下重新做一遍时序验证。2.2 以太网上UDS的时序TCP栈、Nagle算法和“假粘包”DoIPDiagnostic over IPISO 13400把UDS报文封装在TCP/IP上传输物理带宽从CAN的500kbps直接跳到100Mbps甚至1000Mbps理论上一个UDS响应从ECU发出到客户端收到延时可以低到亚毫秒级。但这只是理论上。实际工程里DoIP上的时序问题比CAN更隐蔽。先看TCP本身。很多协议栈默认开启Nagle算法它的逻辑是如果发送缓冲区里还有未收到ACK的小包新来的小包就先积攒起来等ACK回来或者缓冲区凑够了再一起发。UDS的NRC 0x78响应是典型的小包总共才3到8字节。如果TCP_NODELAY没开0x78很可能被“蓄”在发送缓冲区里客户端看到的现象是超时但抓包才发现0x78报文是好几条挤在一起到达的。我当时定位一个DoIP刷写偶发超时问题Wireshark抓包显示ECU侧的时间戳确实按照2000ms周期把0x78发出去了但客户端应用层收到0x78的时间却和最终肯定响应几乎重叠。这说明不是ECU没发而是TCP层把前面的0x78报文滞留在协议栈里最后一次性推给了客户端。客户端在等待期间没有收到任何响应自己的P2*Server先超时了。解决方式就是打开TCP_NODELAY同时在诊断线程里避免频繁地创建和销毁socket连接。还有一个容易踩的点DoIP不止有UDS应用层的P2/P2*/P4定时参数DoIP协议本身还有一套A_DoIP_Announce_Wait、A_DoIP_Ctrl等连接管理超时。很多人把这两套定时器混在一起调结果越调越乱。记住一点DoIP层管“TCP连接建立、路由激活、诊断报文收发连接是否有效”UDS层管“诊断请求-响应时序”P4Server只在UDS应用层生效跟DoIP实体保活超时是两码事。2.3 同一份P4Server配置在两种总线下的推荐值对比对比项CANISO-TP车载以太网DoIP over TCP传输带宽125kbps/500kbps/1Mbps等100Mbps/1000Mbps单帧有效载荷经典CAN 8字节CAN FD最多64字节TCP流通常一次可发几百到上千字节链路层机制总线仲裁多节点共享带宽全双工交换式以太网无总线仲裁传输层分段ISO 15765-2有流控帧和STmin等待ISO-TP over TCP几乎无流控等待0x78发送成本占用总线资源受总线负载影响成本极低但受TCP缓冲影响0x78异常表现可能被其他高优先级报文挤占发送延迟可能被Nagle算法或TCP缓冲滞留造成“假迟到”P4Server推荐配置1000ms~3000ms视处理器负载2000ms~5000ms建议适当放宽关键坑点发送队列堵塞导致0x78发晚TCP粘包/缓冲导致客户端看到的0x78周期不稳定这张表是工程经验值不是标准规定值。后面讲参数标定的时候我会给一套更具体的配置推导过程。3. P4Server参数怎么定从协议栈配置到刷写场景标定3.1 先搞清楚参数链P2Server、P2*Server、P4Server、S3Server在配置UDS协议栈之前建议先把一串定时参数理清楚。除了P2Server和P2*Server还有一个S3Server经常和0x78机制搞混。S3Server是ECU维持非默认会话的超时时间通常也是5000ms靠周期发送0x3E TesterPresent来刷新。刷写过程中如果长时间没有诊断请求进来会话会退出到默认会话导致正在进行的刷写流程失败。很多人以为执行长例程时服务器会发0x78就不用发0x3E了这是不对的0x78是响应0x3E是请求两者作用完全不同。参数链条的关系可以这样理解P2Server决定“首条响应必须多快出来”P4Server决定“此后每隔多久继续告诉客户端我没挂”P2*Server给出整个延长处理的总时间上限S3Server决定“整段会话里客户端必须多久至少来一次请求”。其中P4Server和P2*Server是强耦合的P4Server的推荐值为P2*Server的1/4到1/2。3.2 一个刷写例程的完整时间轴和参数计算示例举个实际例子。ECU收到一条0x31 01 02 01RoutineControl启动例程例程ID是擦除Flash。ECU内部评估这条例程最坏需要4000ms完成包括擦除和擦除后校验。配置如下P2Server50msP2*Server5000msP4Server2000ms。时间轴是这样走的t0msECU收到0x31请求。t30msECU发出NRC 0x780x7F 31 78满足50ms内首响应的要求。t2000msFlash擦除还没结束ECU发出第二条NRC 0x78。t4000ms擦除完成ECU发出肯定响应数据可以是例程结果状态。客户端在t30ms和t2000ms收到0x78时都重置了自己的P2*Server计时器所以它在t4000ms收到最终响应时P2*Server计时窗口是从2000ms重新开始的根本不会超时。如果例程最坏时长变成6000ms怎么办我建议先看能不能把P2*Server放宽到8000ms或10000ms并和诊断仪确认该值。诊断仪如果不支持就要把例程拆碎比如把整片Flash的擦除按扇区分批每批执行一个时间更短的Routine每批都在P2*Server内完成并返回肯定响应。千万不要尝试“先什么都不发等处理完再直接回肯定响应”那会让客户端在P2Server超时后就开始报错。下面是一个简单的参数推导表大家可以直接抄业务场景最坏处理时长P2ServerP2*ServerP4Server推荐普通诊断读写50ms50ms不启用不启用短例程例如读取版本500ms50ms1000ms500msFlash擦除/写入3000ms~5000ms50ms6000ms~8000ms2000ms复杂标定/Key计算1000ms~3000ms50ms4000ms1500ms3.3 客户端测试工具也得配合P2Client和P2*Client的坑P4Server看起来是ECU侧的参数但实际调试验证时客户端工具的处理方式同样关键。ISO 14229-1里也定义了客户端定时参数P2Client和P2*Client分别对应客户端“发送请求后等待首条响应”和“收到0x78后等待最终响应”的最长时间。如果客户端实现没有正确处理0x78即收到NRC 0x78后没有重置P2*Client计时器那么无论ECU的P4Server配得多合理客户端都会超时。我以前用一个开源诊断工具做测试时就遇到过这种工具端定时器处理BUG。服务器明明是2000ms周期发0x78工具却还是在4000ms时报超时后来抓包发现工具在第一次收到0x78后根本没有重新计数。所以排查P4Server问题时除了看ECU侧抓包也要确认测试工具是否在收到0x78后正确重置了自己的P2*Client。两边只要有一边实现不对表象都是“0x78发了还是超时”。4. NRC 0x78处理技巧别让“处理中”变成“故障”4.1 什么场景必须发0x78什么场景不该发先说必须发的场景。凡是一个诊断服务对应的内部操作无法在P2Server默认只有50ms内完成ECU就应该先回复NRC 0x78然后在内部继续执行。最典型的就是0x31 RoutineControl的长时间例程、0x36 TransferData向Flash写入数据的物理擦写、0x34请求下载后进入复杂的预编程检查、以及0x27安全访问里某些耗时较长的密钥计算。再说说不该发的场景。如果服务本身很快或者压根不支持就别用0x78拖延。比如0x22读取某个不支持的DID正确做法是回NRC 0x31requestOutOfRange或0x11serviceNotSupported而不是先发0x78再磨磨蹭蹭回0x31。0x78的意思是“我正在处理但还没结果”不是“我还没想好怎么拒绝你”。还有如果服务需要安全访问且客户端没有解锁也应该直接回NRC 0x33securityAccessDenied而不是发0x78等客户端的后续动作。4.2 0x78与传输层交互的三个陷阱0x78在CAN和DoIP上遇到的传输层问题不一样这里单独拆开。第一个陷阱在CAN的多帧发送队列。0x78响应本身很短一个单帧就能发出去但ECU的CAN发送队列往往不是只服务诊断一个通道。如果发送队列里正好有一个大的多帧响应正在等待流控帧0x78这个帧被排在了后面就可能延迟发出去。处理方式是把诊断响应发送队列独立出来并且把0x78这类短响应放到最高优先级的发送邮箱避免被大数据包卡住。第二个陷阱在DoIP的TCP_NODELAY。前面已经详细说过DoIP socket上不开TCP_NODELAY0x78小包会被Nagle算法滞留。这里再强调一遍诊断应用层数据是强实时性的TCP的优化策略反而会帮倒忙。建议在ECU侧和诊断仪侧的DoIP socket都开启TCP_NODELAY保证每个小包都第一时间发出去。第三个陷阱是0x78和最终响应靠得太近。在DoIP上如果0x78和最终肯定响应发送间隔只有几十毫秒加上TCP缓冲或对端接收线程调度客户端有可能先收到最终响应再收到0x78或者在超时临界点才收到0x78。这会导致客户端状态机出现混乱。我建议ECU在发送完最后一条0x78之后至少要预留比P4Server短一点但明显可感知的间隔再发最终响应比如100ms以上别把两条响应连拍出去。4.3 0x78的重复节奏CAN和DoIP要不要各配一套P4Server之前说过P4Server在CAN和DoIP上的推荐值可以不同。如果ECU同时支持CAN和DoIP两条诊断链路协议栈又支持按物理链路配置定时参数我建议分开配。我实际推荐的思路是CAN经典帧总线上P4Server取2000msP2*Server至少取5000msCAN FD总线上由于帧数据量变大、总线占用时间变短P4Server可以还是2000ms也可以放到2500msDoIP上则建议P4Server放到3000ms左右P2*Server至少取5000ms。原因是DoIP发0x78的成本比CAN低得多但频繁发0x78反而会增加TCP小包数量让抓包日志变得很乱也可能触发对端协议栈的缓冲行为所以不如适当拉长间隔给处理任务多留一些CPU。如果协议栈不支持按物理链路区分P4Server必须全局共用一份配置那就按最差链路的经验值来以CAN上的配置为准DoIP跟着用同时确保DoIP侧TCP_NODELAY打开问题也不大。4.4 长操作期间别忘了TesterPresent0x78和0x3E要配合刷写类长操作还有一个很容易被忽略的问题ECU在非默认会话里执行长时间例程时会话超时定时器S3Server还在走。如果0x78发的很勤但客户端一直没有发送新的诊断请求0x78只是ECU的响应不会重置ECU的S3Server那么S3Server超时后ECU会退出到默认会话后续0x36请求会直接以NRC 0x7E/0x7F之类的错误结束。所以客户端在刷写过程中尤其是在等待0x78期间也要周期性地发送0x3E TesterPresent避免会话掉线。ECU侧如果支持可以在长时间例程处理中挂起普通诊断调度但0x3E必须单独处理。这个配合做得不好最常见的现象是刷写到一半ECU静默或者下一次0x36进来后回一个与当前会话模式不匹配的NRC。4.5 NRC 0x78处理避坑速查清单0x78的响应格式固定为0x7F 请求SID 0x78例如请求0x31响应就是0x7F 31 78。0x78必须是首条响应且必须在P2Server超时前发出。0x78的重复周期由P4Server控制P4Server必须小于P2*Server。0x78之后最终回复只能是肯定响应或非0x78否定响应不能再发0x78。处理期间客户端应周期发送0x3E保持会话ECU应确保自己不会因为0x3E处理异常而掉会话。0x78只表示“服务器还活着、还在处理”不代表“处理一定成功”最终响应可能是0x20之类的错误码。在DoIP上必须检查TCP_NODELAY是否打开。在CAN上要避免0x78和其他长报文共用发送队列。5. 我在项目里踩过的坑与排查方法5.1 现象一DoIP下客户端频繁报P2超时CAN下完全正常这个现象出现过两次都是同一个根因DoIP的TCP socket没有设置TCP_NODELAY。排查过程很简单先在ECU侧和客户端侧分别抓包对比两边的时间戳。ECU侧协议栈打印的日志显示0x78按时发出Wireshark抓到的TCP segment也按时离开了ECU网卡但客户端应用层时间戳却晚了很多。再仔细看抓包就能看到多个UDS响应在TCP层被“打包”到一个segment里明显是被Nagle算法积压了。解决方式是在ECU的DoIP TCP socket初始化时设置TCP_NODELAY选项。如果用的是商业协议栈查一下配置文件里有没有类似“Nagle Disable”的开关。客户端诊断仪侧也一样底层socket不开TCP_NODELAYECU这边再正常也有可能被客户端吃进去的时机坑掉。5.2 现象二CAN上0x78发不出去总线上全是高优先级周期报文某次刷写测试ECU内部任务明明进了长例程处理分支代码也在周期性地调用发送函数可总线上就是抓不到0x78。后来排查发现诊断响应走的CAN发送邮箱和某个高优先级周期报文共用了同一个硬件发送缓冲区周期报文的发送任务每5ms就塞满一次缓冲诊断响应只能等空闲。总线负载高时等一次可能就要20ms虽然单次20ms不致命但连续几次后P4Server的周期被拉长了一倍客户端最终超时。处理方式是给诊断响应单独分配一个发送邮箱或者把诊断CAN报文的标识符优先级设置到比普通周期报文更高。对于0x78这种短帧最好走“即时发送”接口不经过发送队列排队确保P4Server周期在总线突发负载下依然稳定。5.3 现象三Flash擦除时间超过P2*Server但不允许无限放宽这是典型的工程取舍问题。某ECU的Flash擦除最坏要8秒OEM诊断规范又要求P2*Server不能超过5000ms因为你不知道诊断仪会不会自己超时。硬把P2*Server调到10秒换来的可能是客户端兼容性下降。我的做法是拆例程。原来一条0x31擦除整片Flash我改成按扇区多次调用每次擦除一个扇区单次最坏300ms例程在P2*Server内轻松完成。虽然诊断仪需要多轮交互但每一轮都有明确的肯定或否定响应可靠性反而更高。这个思路对CAN和DoIP都适用而且能显著降低P4Server这件事的存在感。5.4 常见问题速查表现象可能原因解决方法DoIP下0x78和最终响应几乎同时到TCP粘包/ Nagle算法缓存开启TCP_NODELAYCAN下0x78周期抖动大总线负载高发送邮箱被占独立诊断发送邮箱提高CAN ID优先级收到0x78后仍然报P2*超时客户端没有重置P2*Client定时器换工具或修工具端状态机0x78之后没有任何最终响应服务器处理任务挂死/状态机跳错查内部例程任务加拉底排查日志刷写过程中会话掉线S3Server超时客户端没及时发0x3E客户端在0x78等待期间周期发0x3E0x78周期接近P2*Server边界P4Server配置过大调整P4Server为P2*Server的1/4~1/26. 工具链与验证方法怎么证明P4Server配置是稳的6.1 用抓包统计0x78间隔别只看协议栈日志验证P4Server最直接的办法就是抓包统计0x78的间隔。CAN侧可以用CANoe或python-can脚本挂在总线上过滤出目标ECU的0x78响应记录时间戳DoIP侧用Wireshark抓TCP流过滤出UDS的NRC 0x78报文用Excel或脚本统计相邻两条0x78的时间差。理论上这个间隔应该无限接近P4Server配置值允许的抖动范围我一般看±20%超过就要查原因。CAN侧我常用一段简单的python-can脚本做快速验证import time import can bus can.interface.Bus(channelcan0, interfacesocketcan, bitrate500000) last_ts None for msg in bus: # 假设ECU响应ID为0x7E8响应数据为 0x7F [SID] 0x78 if msg.arbitration_id 0x7E8 and len(msg.data) 3: if msg.data[0] 0x7F and msg.data[2] 0x78: now time.time() if last_ts is not None: interval_ms (now - last_ts) * 1000.0 if 500.0 interval_ms 5000.0: print(f0x78 interval: {interval_ms:.1f} ms) last_ts nowDoIP侧我会先在Wireshark里过滤出诊断报文然后把时间戳导出到CSV筛选出包含0x7F和0x78的报文用Pandas或者Excel透视表算相邻时间差。整个过程不复杂关键是别只信ECU日志里“已发送0x78”的打印要以总线上/网络上的实际时间戳为准。6.2 我常用的P4Server专项测试用例最后整理几个验证P4Server和0x78机制的用例适合在自己项目里直接落地用例一是P2Server边界测试。构造一个内部处理时间在40ms到60ms之间的诊断服务确认ECU能在50ms内发出首条响应或0x78。用例二是0x78功能测试。构造一个处理时间在500ms到3000ms之间的例程确认ECU首发0x78在50ms内后续0x78间隔等于P4Server最终响应在P2*Server内。这个用例要在CAN和DoIP两条链路上分别跑。用例三是高负载场景测试。CAN侧挂满载总线报文DoIP侧并发大流量TCP传输重复执行刷写流程确认P4Server周期没有被明显拉长。用例四是客户端兼容性测试。用一个没有正确处理0x78的普通诊断仪和一个正确处理0x78的参考诊断仪同时测观察ECU侧是否能通过0x78节奏让两类工具都不超时。如果参考工具和普通工具差异很大基本可以判定是工具端定时器处理问题不是ECU配置问题。我个人在实际项目里的体会是P4Server看起来只是配置文件里一个毫秒数值但它背后牵动的是UDS应用层状态机、底层传输协议、客户端工具兼容性一整条链路的配合。CAN和DoIP的差异不是简单“改个波特率”的问题而是物理层机制差异在应用层时序上的真实映射。每换一条诊断链路都要重新抓包、重新看间隔、重新压一遍边界。多花半小时在调试前做参数推导和抓包验证比事后在整车上排查超时故障要省太多事。希望这篇文章能帮你把P4Server和NRC 0x78那些隐晦的坑一次填平。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CTFshow CRYPTO1-3入门精讲:编码、古典密码与异或实战 2026/9/25 2:29:34

CTFshow CRYPTO1-3入门精讲:编码、古典密码与异或实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
揭秘SoftUART底层原理:源师兄软串口模块如何模拟硬件UART通信 2026/9/25 2:29:34

揭秘SoftUART底层原理:源师兄软串口模块如何模拟硬件UART通信

揭秘SoftUART底层原理:源师兄软串口模块如何模拟硬件UART通信 【免费下载链接】software-serial-module 源师兄扩展项目: 软串口模块 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/software-serial-module 源师兄的软串口模块&#xff08…

阅读更多 →
RisingWave Kafka CDC Sink 集成测试实战:Debezium 格式下 Flink SQL 与 JDBC 双管道落库方案 2026/9/25 2:29:34

RisingWave Kafka CDC Sink 集成测试实战:Debezium 格式下 Flink SQL 与 JDBC 双管道落库方案

数据库流处理后端数据工程 【免费下载链接】risingwave Event streaming platform for agentic AI. Continuously ingest, transform, and serve event streams in real time, at scale. 项目地址: https://gitcode.com/gh_mirrors/ri/risingwave 点击查看 免费下载…

阅读更多 →
IronClaw OOBE 首次运行引导:从空白落地页到 Agent 驱动的建议卡片全链路解析 2026/9/25 2:29:34

IronClaw OOBE 首次运行引导:从空白落地页到 Agent 驱动的建议卡片全链路解析

人工智能AI 应用交互助手AI Agent 【免费下载链接】ironclaw IronClaw is an Agent OS focused on privacy, security and extensibility 项目地址: https://gitcode.com/gh_mirrors/iro/ironclaw 点击查看 免费下载 IronClaw 的 OOBE(Out-of-Box Exper…

阅读更多 →
PyFlink StreamExecutionEnvironment 完全指南:从环境创建到作业提交的核心 API 实战 2026/9/25 2:29:34

PyFlink StreamExecutionEnvironment 完全指南:从环境创建到作业提交的核心 API 实战

大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 StreamExecutionEnvironment 是 PyFlink DataStream 程序运行的上下文环境:它既决定了作业在本地 JVM 还是远程集群上执行&a…

阅读更多 →
ng-zorro-antd Badge 可点击用法:用 `<a>` 标签包裹实现可链接徽标(附源码原理解析) 2026/9/25 2:29:28

ng-zorro-antd Badge 可点击用法:用 `<a>` 标签包裹实现可链接徽标(附源码原理解析)

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 导读 本文围绕 ng-zorro-antd(Angular 组件库)中 Badge 徽标…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉