`
hasi
  • 浏览: 58097 次
  • 性别: Icon_minigender_1
  • 来自: 北京(老家内蒙古)
社区版块
存档分类
最新评论

两个系统之间的通讯问题

阅读更多
业务: 服务器端需要收集每个客户端的月报信息
数据库表: 每个客户端都有t_report月报表,服务器端有一个t_server_report表和一个收集任务表t_server_task
实现:
1 在服务器端人为生成收集任务(t_server_task表中加一条记录)
2 服务器端有个定时(每隔几分钟)运行的程序(在servlet 里执行)扫描收集任务表(t_server_task)查看是否有新的任务.


3 如果有新任务就通知指定的客户端收集月报表信息
4 客户端程序开始运行收集月报信息,然后发送给服务器端(每个客户端的数据量在8000条左右,10个列都是很简单的数据类型)
5 服务器端接收客户端的返回月报信息后插入到服务器端的t_server_report表中,然后进行分析.

注意:服务器端程序不能访问客户端的数据库,客户端的程序也不能访问服务器端的数据库

目前 3 4 5 步不知道怎么实现比较好
希望听听大家的意见
分享到:
评论
20 楼 jianfeng008cn 2006-11-07  
pdw2009 写道
用一个中间数据表吧,最简单!!!!!不需要做啥修改

得有地方建啊 不是说了 不能互相访问数据库的吗
19 楼 pdw2009 2006-11-06  
用一个中间数据表吧,最简单!!!!!不需要做啥修改
18 楼 hasi 2006-11-01  
通过http传送的类(序列化的类),除了属性和get,set方法,不能包含别的方法,
包含别的方法就出错,这个问题怎么解释?
17 楼 myaniu 2006-10-30  
可以看看ICE
www.zeroc.com
不过,他使用的是双协议,这个可能得考虑。
16 楼 yuanfu 2006-10-29  
1、对于问题3,比较简单,URL就可以搞定;
2、传递大数据量,用http传递序列化java对象,没有问题;当然你的客户端和服务器端都要是java实现;
3、计划任务可以使用Quartz来完成。
15 楼 hasi 2006-10-29  
目前直接用http传递序列化的java对象,效果还可以
下面是我的实现过程
服务器端程序主要代码
TaskListenerServlet.java
public void init() throws ServletException {
	TimerTask myTask = new MyTimerTask();
	myTimer = new Timer();
	long startMin=60;
	long intervalMin=60;
	myTimer.schedule(myTask, startMin*1000, intervalMin*1000);
}

MyTimerTask类里的run()方法主要代码
try {
	// 设置网络输出流,idcServletAddress为客户端的servlet地址
	URL url = new URL(idcServletAddress);
	URLConnection uc = url.openConnection();
	uc.setDoOutput(true);
	uc.setDoInput(true);
	uc.setUseCaches(false);
	uc.setRequestProperty("Content-type", "application/octet-stream");
	ObjectOutputStream requestout = new ObjectOutputStream(uc.getOutputStream());
	//发送给客户端的servlet
	IDCInfoBean idcbean = new IDCInfoBean();
	idcbean.setIdc(idc);
	requestout.writeObject(idcbean);
	requestout.flush();
	requestout.close();
	//获取返回的二进制对象流
	ObjectInputStream responsein = new ObjectInputStream(uc.getInputStream());
	//还原
	TransProgramList tpl=  (TransProgramList) responsein.readObject();
	//把数据保存到服务器端数据库里
	CollectTaskService.executeTask(idc , tpl);
	responsein.close();
}catch (Exception e) {
      throw e;
}
 

客户端servlet程序主要代码
public void service(ServletRequest request, ServletResponse response) throws
    ServletException, IOException {
        //封装用于返回的对象输出流         
	ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());     
	//封装用于接收的对象输入流     
	ObjectInputStream in = new ObjectInputStream(request.getInputStream());     
	IDCInfoBean idcBean=new IDCInfoBean();     
	//按指定类的格式读取对象输入流中的内容     
	try {        
		idcBean=(IDCInfoBean)in.readObject();         
	}catch (Exception e ){
		System.out.println(e.toString());
		//
	}
	String idc = idcBean.getIdc();
	//得到客户端所有节目信息
	List programList =CollectService.collectProgram(idc) ;
	List multiList =CollectService.collectMultiProgram(idc) ;
	//把结果封装到序列化对象里
	TransProgramList tpl = new TransProgramList();
	tpl.setProgramList(programList);
	tpl.setMultiList(multiList);
	//发送对象
	out.writeObject(tpl);    
}    

14 楼 Jamsa 2006-10-29  
这样的业务是否该使用消息驱动POJO
13 楼 lordhong 2006-10-28  
直接用Hessian啊,几个POJO直接在HTTP上传过去,很简单
12 楼 bluemeteor 2006-10-27  
数据放到memcache里面  通过webservice提供访问接口
11 楼 ddandyy 2006-10-27  
我们这个项目有类似的应用
我们这个是中间用一个FTP中转  一边写文件  一边读文件

这个是客户定下的
10 楼 hasi 2006-10-27  
Ivan Li 写道
8000多条记录呢,http中get方法url的大小是有限制的,好像是128k,我觉得字符串的不可行

对象序列化后用http传送
9 楼 greenq 2006-10-27  
想都不用想,       socket啊。
还webservice,      好大的的一把牛刀
8 楼 iceboundrock 2006-10-27  
用cindy框架可以减少一些socket的复杂度,具体可以参考
http://cindy.sf.net
7 楼 抛出异常的爱 2006-10-27  
Ivan Li 写道
8000多条记录呢,http中get方法url的大小是有限制的,好像是128k,我觉得字符串的不可行

当时的数据也不少
只是懒的作模块了
每条数据发一个url中间用个定时器隔开
(每条数据给10秒时间)
(呵呵.....谁让他们只给三天时间呢?)
6 楼 IvanLi 2006-10-27  
8000多条记录呢,http中get方法url的大小是有限制的,好像是128k,我觉得字符串的不可行
5 楼 抛出异常的爱 2006-10-27  
url传.....
作过一次维护
就是组成一个字符串
给另一个系统发url
由另一系统处理
4 楼 rtdb 2006-10-27  
Socket太底层了,比较麻烦。用WEB Service之类的好了。
3 楼 hasi 2006-10-27  
Socket 以前没有接触过,刚查了一些资料,应该很适合的
2 楼 sorphi 2006-10-27  
sock编程就可以了吧?
1 楼 hasi 2006-10-27  
数据通过http传递有没有问题?
RMI可不可以?

相关推荐

    同机两个swf通讯

    当我们谈论"同机两个swf通讯"时,这意味着我们有两个不同的SWF文件,它们需要在同一个设备上相互通信,交换数据或触发特定的交互行为。这种通信通常通过Flash的本地连接(LocalConnection)功能实现。 本地连接是...

    两个S7-200 PLC之间Modbus通讯实现(从站).pdf

    本篇文档详细阐述了如何在两个S7-200 PLC之间通过Modbus协议实现通讯,并且专注于从站的配置与实现。 知识点一:S7-200 PLC与Modbus通讯基础 1. Modbus通讯协议分为Modbus RTU和Modbus ASCII两种模式,其中Modbus ...

    Codesys-基于网络变量列表实现两台PLC之间的通讯

    总结,Codesys的网络变量列表功能大大简化了两台PLC之间的通讯配置,尤其是对于需要频繁交换数据的系统,这种方法具有高效、易用的特点。通过遵循上述步骤,工程师可以快速实现PLC之间的数据传输,提高系统的集成度...

    CodeSys如何在两个PLC之间通信

    在版本V3.5中,实现两个不同PLC之间的通信是一项重要的功能,这有助于实现分布式控制系统,使得不同设备间的数据交换成为可能。以下将详细介绍如何在CodeSys V3.5中设置和实现两个PLC间的通信。 1. **通信架构**:...

    两个AB PLC5000通过生产者和消费者进行通讯

    除了网络通信外,实现两个PLC之间数据共享和交换还需考虑物理连接的问题。确保硬件连接正确无误,网络设备如交换机和路由器工作正常,也是成功通信的重要因素。 总之,在使用两个AB PLC5000通过生产者和消费者进行...

    net和C#中两个exe消息通讯

    在.NET和C#编程环境中,实现两个独立的可执行文件(EXE)之间的通信是一项常见的需求,这通常涉及到进程间通信(Inter-Process Communication, IPC)。在这个场景中,"WinForm之间消息通讯"指的是在Windows Forms...

    发那科两台机器人之间EIP通讯.doc

    为了确保两台机器人的正常通讯,这两个网口的IP地址必须处于不同的子网中。这是为了避免IP冲突并确保网络的正确分隔。例如,一台机器人可以设置为192.168.1.1,而另一台可以设置为192.168.2.1。这样的配置允许它们在...

    利用OPC接口实现SCADA系统与PLC之间的通讯.pdf

    在现代工业自动化领域,SCADA(监控控制和数据采集)系统和可编程逻辑控制器(PLC)是两个非常重要的组成部分。SCADA系统主要用于对生产过程进行监控,PLC则承担着控制逻辑的执行任务。两者之间需要实时数据交换,以...

    两台电脑之间的UDP通讯 实例

    在两台电脑之间进行UDP通讯时,我们通常会利用编程接口,如Windows Socket(简称Winsock),来实现数据的发送和接收。本实例主要探讨如何使用Winsock控件在两台电脑上实现UDP通信。 首先,我们需要了解Winsock的...

    基于消息的通讯系统设计(C++源码)

    本设计的目的:是通过设计和调试一个基于消息的通讯系统,来实现进程之间的间接通讯,使学生对进程间的通讯机制、进程间的同步机制有一个深入的理解。 具体要求如下: ⑴设计一个消息传递系统,使两进程以消息为...

    cpp-CJAG两个位于同一个位置的虚拟机之间基于CPU缓存的通信

    本文将探讨“cpp-CJAG”项目,它关注的是两个位于同一物理位置的虚拟机之间如何利用CPU缓存进行高效通信。 标题中的"cpp-CJAG"可能是一个开源项目或研究,专注于使用C++编程语言来实现CPU缓存通信机制。C++是一种...

    两个MQ队列管理器之间互相发送消息

    两个MQ队列管理器之间互相发送消息,尤其实在广域网中,两个队列管理器之间的通讯就是MQ之间的消息传递

    两台倍福CX控制器之间的 TC3 EAP通讯程序与文档.rar

    通过EAP通信,两个控制器可以实时同步状态信息,协调运动控制、I/O数据交换和其他自动化任务。 综上所述,掌握两台倍福CX控制器之间的TC3 EAP通信技术,对于优化工业自动化系统的效率和可靠性至关重要。通过深入...

    基于Citect的多个控制系统通讯的设计与应用.pdf

    这种基于Citect的通讯方案不仅解决了不同控制系统之间的数据交互问题,也体现了当前工厂自动化系统整合和管控一体化的需求。OPC和ODBC的结合使用为实现多系统间的高效协同提供了有效途径,有助于提高生产过程的自动...

    两块单片机之间串口的通讯

    RS-232支持全双工通信,即数据可以同时在两个方向上传输。典型的数据位数为8位,停止位可选1或2位,奇偶校验位可选或不选。 2. **单片机串口设置**:在两块单片机之间建立串口通信前,需要对它们的串口进行配置,...

    使用PLC SIM仿真PLC之间通讯.pdf

    在S7-300与S7-400系统之间,S7-300 PLC只能作为通信的Server,而S7-400 PLC通过调用SFB(系统功能块)14(GET)、SFB15(PUT)来进行单边通信访问Server的数据。 S7通信所需的功能块包括SFB8(USEND)/SFB9(URCV)...

    两个apk之间广播互相通信及ContentProvider监听数据库的变换

    本教程将深入探讨如何利用Broadcast和ContentProvider实现两个apk之间的通信以及ContentProvider对数据库变更的监听。 首先,我们来理解Broadcast(广播)的概念。Broadcast是Android系统中一种全局的通知机制,...

    STC89C52PLCC封装8051单片机,控制LCD1602液晶,两个MCU相互通讯,测试24芯电缆导通是否良好。

    本文将深入探讨STC89C52的特点、PLCC封装的优势,以及如何利用它来控制LCD1602液晶显示器,并实现两个MCU之间的通讯,最后还将涉及24芯电缆的导通测试方法。 STC89C52是基于8051内核的单片机,由宏晶科技(STC)...

    两单片机之间的通讯程序

    本项目聚焦于51单片机之间的双向通信,这是一个基础且实用的技能,能够实现两个单片机之间的数据交换,为复杂的系统集成提供可能。下面将详细解析这一主题。 首先,51单片机是基于Intel 8051微控制器架构的一种通用...

    两台设备的TCP通讯_Codesys的两台设备之前的TCP通讯_

    在Codesys编程环境中,你可以使用“网络视图”来配置网络连接,为每个设备分配IP地址,这在实际的工业网络环境中至关重要,因为正确的IP配置是设备之间通讯的基础。 接下来,你需要编写TCP通讯的程序。Codesys提供...

Global site tag (gtag.js) - Google Analytics