`
yipsilon
  • 浏览: 242826 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

远程JDBC连接的一个思路

阅读更多

最近在移植一个原来是基于局域网通讯的C/S软件转换到基于互联网通讯,软件在局域网中时使用JDBC直接访问数据库,而在互联网中,这样的方式会带来非常可怕的后果。因此,我在想是否有一种思路通过互联网代理通讯的方式把JDBC数据进行路由,提高安全性不说,做好的话还有可能提高数据库并发访问性能。

 

这个方式目前还没有实现,但是思路大致应该是这个样子的:

 

// 服务器端,假设访问的是MySQL数据库,服务端口为81
JDBCServer server = new JDBCServer(81);
// mysqlservice JDBC服务名
// mysql 数据库类型
// localhost:3306 数据库主机地址及端口
// db1 数据库名称
// username 数据库用户帐号
// password 数据库登录密码
server.addDataSource("mysqlservice","mysql","localhost:3306","db1","username","password");
// 启动服务器
server.start();

再看看客户端如何访问:

// 客户端
// 注册数据库驱动程序
Class.forName("com.cmspad.jdbc.Driver");

// 向往常一样,创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:cmspad://192.168.0.188:81/mysqlservice","username","password");

// 然后进行标准的JDBC操作
...

conn.close();

假定服务器与客户端的通讯使用一种私有的协议,可以使用一些可控连接技术提高通讯的稳定性,也可以使用SSL等加密技术提高通讯安全性。

 

这样,我们开发的互联网端应用程序时就不用考虑跨互联网通讯问题,而且还可以使用最原始的JDBC操作方式进行数据(注意:不是数据库)访问。

 

这对于降低程序开发难度,以及使用基于JDBC的一些ORM工具都会带来很好的效果,能预见性的不足就是效率严重依赖网速。

 

BUT,当前只是设想,至少我这边还没有实现... 

分享到:
评论
10 楼 mp_juan 2010-05-22  
楼主可以采用WebService来实现数据的互操作,当然如果你觉得WebService不适合你的话,可以自己编写一个TCPServer通过TCP和xml进行数据的互操作
9 楼 yipsilon 2010-05-22  
ray_linn 写道
yipsilon 写道
ray_linn 写道
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。

晕,被你套进来了。

这东西是个思路,具体实现用什么都可以,比如使用HTTP等开放规范可以实现,甚至弄个私有协议实现,就算用VPN也是可以的啊,我在代码里也没写到底是用什么实现的,因为这只是思路,不是实现。

不过如果没有特殊需求的话,我不建议互联网客户端用VPN,因为他是长连接(如果没记错的话),如果客户数多了负载压力很大;如果程序是用Java开发的话,恐怕还要捆绑其他语言开发的程序。


说实话,VPN是一种公司的基础设施建设,长连接并不是问题....而且数据转发也根本没必要,传统以来,过防火墙的一般都是服务接口,RMI\iiop\DCOM\webservice\xml-rpc都是如此

VPN在底层虚拟了局域网,但代价也是很大的,尤其表现在其高可用性问题上。如果代价非常小的话,像QQ、MSN以及网游这样的互联网软件就不用自己开发通讯协议了。

不可否认VPN的好处,但是使用它是有局限性的。
8 楼 ray_linn 2010-05-21  
yipsilon 写道
ray_linn 写道
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。

晕,被你套进来了。

这东西是个思路,具体实现用什么都可以,比如使用HTTP等开放规范可以实现,甚至弄个私有协议实现,就算用VPN也是可以的啊,我在代码里也没写到底是用什么实现的,因为这只是思路,不是实现。

不过如果没有特殊需求的话,我不建议互联网客户端用VPN,因为他是长连接(如果没记错的话),如果客户数多了负载压力很大;如果程序是用Java开发的话,恐怕还要捆绑其他语言开发的程序。


说实话,VPN是一种公司的基础设施建设,长连接并不是问题....而且数据转发也根本没必要,传统以来,过防火墙的一般都是服务接口,RMI\iiop\DCOM\webservice\xml-rpc都是如此
7 楼 yipsilon 2010-05-21  
ray_linn 写道
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。

晕,被你套进来了。

这东西是个思路,具体实现用什么都可以,比如使用HTTP等开放规范可以实现,甚至弄个私有协议实现,就算用VPN也是可以的啊,我在代码里也没写到底是用什么实现的,因为这只是思路,不是实现。

不过如果没有特殊需求的话,我不建议互联网客户端用VPN,因为他是长连接(如果没记错的话),如果客户数多了负载压力很大;如果程序是用Java开发的话,恐怕还要捆绑其他语言开发的程序。
6 楼 ray_linn 2010-05-21  
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。
5 楼 mblmh2008 2010-05-21  
<p><span style="font-family: 'comic sans ms', sans-serif;"><span style="font-size: large;">I bean sleeping for forty days and i know i'm not sleeping cause dream so amazing.</span></span></p>
<p><span style="font-family: 'comic sans ms', sans-serif;"><span style="font-size: large;">It's magical mistery kind, must be a lie.</span></span></p>
<p><span style="font-family: 'comic sans ms', sans-serif;"><span style=""><span style="color: #cc99ff;">Was it you who spoke the word that tings would happen but not to me,</span></span></span></p>
<p><span style="font-family: 'comic sans ms', sans-serif;"><span style=""><span style="color: #cc99ff;">Oh things gonna happen naturely.</span></span></span></p>
<p><span style="font-family: 'comic sans ms', sans-serif;"><span style=""><span style="color: #cc99ff;">Taking you advice i'm looking on the bright sight and balancing the whole thing.</span></span></span></p>
<p><span style="font-family: 'comic sans ms', sans-serif;"><span style=""><span style="color: #cc99ff;">But often times those words get tangled up in lines</span></span></span></p>
<p> </p>
4 楼 yipsilon 2010-05-21  
to xzqttt:

其实这个思路的通讯协议可以是私有的,也可以是某种webservice的实现,只不过路由的是封装JDBC的数据罢了,但我还是偏向私有协议,因为web service对数据流的支持貌似不好。

如果架构比较好的话,实现异步传输也是可以的,查询的时候连接即可,没有必要实时通讯。

to deadcode:

同上,其实流程应该是这个样子的: Local JDBC Driver <-(any web service or private protocol)-> Remote JDBC Server

这思路的主要目标是为了大家简化开发互联网富客户端。

to ray_linn:

哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。
3 楼 ray_linn 2010-05-21  
JDBCServer server = new JDBCServer(81);  

看到这行你基本就可以死心了,如果可以在Firewall上挖墙的话,那还要IT干什么?

用个VPN不就解决所有一切了?连代码都不用改。
2 楼 deadcode 2010-05-21  
同意楼上,客户端怎么也不应该直接JDBC到数据库服务器上。
1 楼 xzqttt 2010-05-21  
个人建议:互联网的数据交互使用webservice,数据发送到server上在server端再做数据库的处理。

这种互联网的jdbc连接我觉得不太靠谱。如果始终持有连接,多个client同时持有肯定成问题;如果每次需要访问数据库的时候再建立连接访问结束后在释放连接,性能太差。

相关推荐

Global site tag (gtag.js) - Google Analytics