使用JAVA编写报文接收端的注意事项

用java编写计算机 #利用java编写计算机 #代码 注意包别放错位置 package TextSY; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JTextField; class jisuanji extends JFrame implements ActionList... 阅读详情

使用JAVA编写报文接收端的注意事项

在JAVA中编写报文服务端,是非常简单的事情,因为JAVA已经为我们封装了TCP/IP这些东西,我们不需要去关注这些;它对我们提供了方便操作的ServerSocket类,如果不考虑其它因素,那么要启动一个服务端,只需要简简单的几句代码:

//以下启服务端,其中6500表示用于侦听客户端连接的端口

ServerSocket serverSocket=new ServerSocket(6500);

while(true){

Socket socket=serverSocket.accept();

if(socket!=null){

System.out.println("有客户端连接过来");

//下面对客户端做相应的动作,这里省略

}

}

从上面可以看出,我们根据没有去管理那些协议去怎么样实现,走的七层网络协议还是四层网络协议,这些对我们来说都可以暂时不去管。但是,这种东西只能说你看到了希望(没有像现在的中小学奥数班一样,在你一开始的时候就让你对学习失去兴趣)、有了信心,后面要做什么事情,就是在现在的基础之上扩充,使苦适合于真实的环境中,就像大家经常说的一句话一样:社会,是现实的。我们还需要考虑以下方式的事情:

1、正确性与精确性。这句话是从软件工程上学来了,因为不管是做什么软件,写什么代码,如果连正确都谈不上,那这个东西存在的意义也不大。这里就是要能够正确处理客户过来的请求,不要将客户查询的请求搞成了更新或者是删除,那后果可就严重了,所以这是第一个要注意的。

2、性能与效率。当你写的代码能够做正确的工作的时候,不管是一分钟完成还是十分钟完成,再甚者N个小时,只要是正确的,客户都可以接受,当然你得给客户N个多可以接受的理由,如:查询的时候要关联很多表,数据量太大,计算的时间比较久,就如我现在这边的全行日终跑报表系统,客户几个小时都可以接受。但是我们不能够满足于这样,我们是程序员,在可能的情况下让自己写的东西跑得更快,而不仅限于跑得完就是了,就像马拉松,人人都可以跑,就算不得冠军也不要搞个最后一名吗!其中有一块特别需要优化的就是要采用连接池替代单一的“请求-连接”模式,成熟的、开源的、稳定的连接池网上很多,比较常用的有APACHE的DBCP、W3C的C3P0、Hibernate自带的连接池等等,性能都还不错,这样可以节省系统资源与加快运行速度。

3、能够处理的最大并发数。这时就要采用线程池的方式,不要来一个请求就新启动一个线程,这样请求越多,要求生成的线程数也越多,达不到调节系统资源的目的;采用线程池可以自动调节,如果请求少的情况,就少生成连接数,如果多的情况下就多生成,再如果超过了最大的连接数,那让就他们等到有空了再说;这同做生意一样,桌子板凳都没有了,就只有等到别人吃完了。JDK自1.5开始就自带有连接池,需要我们关心的东西,只需要调用的时候设置向个参数,如最小连接数、最大连接数、线程的生存时间及单位等,它会帮忙管理 与调用线程,以保证系统性能的最大化,启动调用和单独采用Thread启动线程没有什么区别。最简单下面两句代码就OK:

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 50, 3,TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10),new ThreadPoolExecutor.DiscardOldestPolicy());

threadPool.execute(new MsgListener(clientSocket));

4、代码不一定要自己写。没错,能够不自己写的就最好不要写,因为代码是写的越多错的机会越多,并且还要花时间去调式,有够用现成的工具,如上面的线程池、连接池等等,都可以说是比较优秀的,因为他们都经过时间的检验,写这些代码的都是比较高的人,我们完全可以信赖。如果要对数据进行操作,我的方式是先用POWERDESIGNER做CDM,把关系都理好了,再生成PDM,然后写到库,然后再通过HIBERNATE的MIDDLEGEN工具,生成Hibernate映射文件,再通过Hibernate的HBM2JAVA,再生成基础的代码,这样你可以省去不少的时间,并且可以保证性,然后你再写关注自己业务方面的东西,开发起来又快又稳。

5、保证客户端过来的请求都能够被处理。请算你采用连接池,但有些时候遇到连接确定太忙,数据库服务忙不过来,这个时候去数据库操作,如你要将客户端过来的报文写到库中保存,但是HIBERNATE给你报过"Can't Open Connection",那你的这表交易就不处理了吗?不可能,这是金融系统,由人行的发过来的,你以为它还等你说,如果失败次数超过了规定了,那就等着挨批吧。所以这个时候就算没有成功,也要说我成功了,后面再把失败的给做进去。我这里采用将失败的即发生异常的交易的报文全部放到XML中,然后再通过线程定时去检测并处理,这样就可能保证只要是接到了的请求,在线程池没有严重超标的情况下,所有的请求都可以被处理;为什么说没有严重超标呢,因为如果线程池超时过久,就会被线程池给KILL掉,所以请求就莫明其妙的没有了,但也不能够将线程的生存周期设置太久,否则这样也不利用其它线程的处理,会导致更大的问题。

6、参数配置化。尽量将需要用到的变更,与客户环境有关的,都做成参数化,这样就不需要我们再去修改程序了。

7、多做测试。在完成某个功能,或者是某个模块的时候,一定要测试,否则等到后面来一运行,什么问题都一下子出来了,找问题都不知道从什么时候找起。边做边测试,这是只有好处没有坏处的。如这里你一定要有客户端,去测试你的服务端,测试并发的性能与处理的结果的正确性与快速性等。

本文出自:冯立彬的博客



Java编写接口注意事项 本文总结了Java后端接口开发的关键注意事项:1) 区分RESTful API与传统MVC控制器,使用@RestController返回JSON数据;2) 合理选择请求映射注解(@GetMapping/@PostMapping等)对应HTTP方法;3) 掌握参数处理注解如@PathVariable获取路径变量、@RequestParam处理查询参数;4) 使用@RequestBody接收JSON请求体;5) 通过@Valid实现数据校验;6) 采用Swagger注解生成API文档。 阅读详情

相关推荐

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7446

java 获取request报文_获取request参数和返回response

本节重点1. 总结1 整理下servlet传递参数方法,根据HTTP Method主要分为两种:(1)第一种get方法get方法的参数放置在HTT报文的请求行的URL字段,格式为key-value键值对。(2)第二种POST方法有了get为什么还要引入post方法, 当我们想要传递秘密的数据时,使用get会将这些数据显示到地址栏,显然不合适,所以,引入了post方法。POST方法的参数都放置在HT...

weixin_35735088的博客 7397

SRAM compiler选项中 Soft Error Repair (SER)

引起的瞬时故障,可能会影响 SRAM 中存储的数据。SER 功能通过某种机制检测并修复这些错误,从而提高存储器的可靠性。在 SRAM 编译器中,

hzmscut的博客 1153

java接收报文跳转页面_Java手写HTTP服务器:00、实现接收浏览器的请求报文,然后返回响应报文...

0、先将以下代码运行起来:import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.text.SimpleDateFormat;import java.util.Date;public class HttpServer {public static void main(String[] args...

weixin_39520988的博客 325

手把手教你用芯驰X9HP驱动MAX96755/MAX96752点亮智能座舱仪表屏(附完整寄存器配置表)

本文详细介绍了如何使用芯驰X9HP驱动MAX96755/MAX96752实现智能座舱仪表屏的完整开发流程,包括硬件架构解析、关键寄存器配置、Linux BSP集成及调试技巧。通过实战指南和完整寄存器配置表,帮助开发者快速掌握驱动开发核心技术,提升智能座舱系统的显示性能与稳定性。

weixin_30879169的博客 526

使用FloodRisk2插件进行洪水风险评估

入汛以来,长江流域持续的强降雨使得沿岸多地成为洪水风险极高地区,抗洪、抢险、救灾继新冠病毒之后成为又一个攻坚阵地。如何科学地评估洪水风险,是快速决策的关键。 实际生活中,根据风险是否可控,一般将洪水风险大致分为两类:一类是通过数据分析可以得出其发生的可能性和后果,如强降雨引发的区域性洪水、水库/大坝溃决洪水等。这类洪水可以通过有关资料分析和设定一定条件计算得到可能的损失后果,也就是说,风险可以预判。另一类洪水风险基本是未知的,如滑坡堵塞河道形成堰塞湖引发的洪水,无法预知事件发生的地点和规模,具体的洪水风险无

QGISClass的博客 2877

Java发送报文与接收报文

发送报文,接收报文,解析报文,返回报文

lolly1023的博客 1万+

C++五子棋人机对战

使用C++,开发五子棋人机对战,快速提升C++项目开发能力。

程序员Rock的博客 5万+

java监听端口请求,监听端口,获取webService请求报文

第一步下载我们的wsdl文件到本地第二步建立一个测试webservice工程,把wsdl放在项目里面第三步把测试webservice中的wsdlLocation改成localhost.....你的wsdl本地项目的地址.第四步wsdl中的地址改成127.0.0.1 如果是域名则在host文件中配置第五步创建java项目监听80端口import java.io.BufferedReader;impo...

weixin_39823299的博客 902

开源鸿蒙具身机器人(ROS2框架):从内核驱动到智能算法的完整实践

本指导文档旨在为开发者提供完整的开源鸿蒙(OpenHarmony)具身机器人开发解决方案,涵盖从底层驱动到上层ROS2应用的全栈开发流程。文档结合OpenHarmony内核驱动移植技术和ROS2机器人操作系统,为具身机器人开发提供详细的技术指导。具身机器人(Embodied Robot)是指具有物理实体、能够感知环境并与之交互的智能机器人系统。感知-决策-执行闭环多模态传感器融合(视觉、听觉、触觉、力觉)实时环境感知与理解智能决策与规划精确运动控制执行具身智能特性物理世界交互能力。

m0_67505153的博客 1268

FGC_grasp复现

FGC_GraspNet复现

qq_39568387的博客 385

UDP 的报文结构和注意事项

UDP报文格式包含8字节固定头部,由源端口、目的端口、长度和校验和四个16位字段组成。UDP是无连接、不可靠的协议,不保证数据送达且无重传机制。编程时需注意:报文大小建议≤1472字节避免IP分片;接收缓冲区必须足够大并检查实际接收长度;DatagramSocket存在线程安全问题;应设置超时避免阻塞;及时关闭资源防止端口占用。在IPv4中校验和可选,IPv6中必须使用。

tryxr的博客 1311

SAP Build Work Zone standard edition 订阅报错 OIDC trust missing 的成因与完整解决路径

摘要:用户订阅SAP Build Work Zone时遇到422错误,提示未配置OpenID Connect信任。该错误表明业务用户需通过SAP Cloud Identity Services的OIDC协议认证,而当前子账户仅配置了SAML信任或未配置信任。解决方法是进入子账户的Trust Configuration页面,使用Establish Trust功能建立与SAP Cloud Identity Services的OIDC信任关系。这是SAP新版服务的强制要求,SAML协议已不被支持。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 197

Java NIO实战篇:使用Socket实现报文交互

最近有个对接渠道需求,对方提供文档中要求使用Socket短链接的方式进行报文交互,所以这边采用NIO方式编写Socket。

猪大肠的博客 2722

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何用Java轻松解析DNS报文

利用Java解析DNS报文其实并不复杂,通过使用Apache Commons Net库,我们可以轻松构建DNS请求并解析响应。掌握这些基本技巧后,能够帮助你在网络编程中更加得心应手。希望这篇文章对你有所帮助,如果你有任何问题,随时可以讨论!

字节王德发 1232

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

编写跨平台Java程序注意事项

欢迎光临娇娃虚拟社区    www.dukejava.com---- 使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢?下面是在编写跨平台的Java程序是需要注意的一些事情: ---- 1. 编写Java跨平台应

javaduke的专栏 1026

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

cmd中javac和java使用及注意事项

一、简述: cmd中,执行java命令与javac命令的区别: javac:是编译命令,将java源文件编译成.class字节码文件。 例如:javac hello.java 将生成hello.class文件。   java:是运行字节码文件;由java虚拟机对字节码进行解释和运行。 例如:java hello   二、详述: 下面我们来写个java文件试试。 1、打开记事本...

望穿秋水见伊人的博客 16万+

使用Eclipse编写Processing程序的一些注意事项

使用Eclipse编写Processing程序的一些注意事项 最近要做一个使用processing的数据分析作业,安装好processing之后发现原生的编译器不够好用,于是有了把它在Eclipse里写的念头。上网找了几篇教程后发现示例代码无法正确运行,而且都是比较早的文章,又去翻了一阵找到了processing关于这部分内容的官方文档,看了看,问题完美解决。不得不说,官方文档永远是最规范完整的解...

weixin_43897961的博客 1330

java代码编写注意事项

去掉程序中没用到的jar包,js文件等。 将css放在html页面的顶部,而把js放在html页面的底部 1.尽量指定类的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。另外,如果指定一个类为final,则该类所有的方法都是fina

honey_Claire的专栏 6420

讲解关于编写跨平台Java程序时的注意事项 选择自 tiewen 的 Blog

使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢?下面是在编写跨平台的Java程序是需要注意的一些事情:1、编写Java跨平台应用程序时,你可以选择JDK1.0,1.1,1.2或支持它们的GUI开发工具如:Jbuil

蘸月居 619

java注意事项

1、类,方法的注释,要以javadoc的方式写2、非Javadoc 的注释,往往是给代码的维护看的,着重告诉读者为什么这样写,如何修改,注意什么问题等3、使用tab操作,实现缩进,默认整体向右移动。选中,tab整体右移,shift+tab整体左移4、运算符和 = 两边习惯性各加一个空格。比如:2 + 4 * 5 + 232 + 235、源文件使用utf-8编码6、 行宽度不要超过80字符7、代码编写次行风格和。

m0_59267941的博客 633

spring boot编写注意事项

Spring Boot 是一个非常流行的 Java 框架,它基于 Spring 框架,旨在简化新 Spring 应用的初始搭建以及开发过程。通过使用 Spring Boot,开发者可以快速创建独立的、生产级别的基于 Spring 的应用。

2403_87236754的博客 1053
上一篇: 设计模式入门学习之适配器模式
下一篇: JAVA中泛型
冯立彬
冯立彬 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄21年 5458粉丝 593原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值