Postgre SQL   发布时间:2022-05-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了POSTGRESQL 让客户端互相通信大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

POSTGREsql 让客户端互相通信

在客户端/服务器的工作模式下,客户机处于主动状态,发送请求给监听状态的服务器,后者处理后再将结果返回给客户机。
在这种工作模式下,客户端只与服务端联系,因为它不处于监听状态,所以无法收到服务端或其他客户端“不请自来”的信息。这导致一个现象发生:当某个客户端修改了服务端的数据后,其他客户端不能实时获知,以至这些客户端所获取的数据过时。目前解决的主要方法是客户端周期性向服务器端获取数据,即使这些数据并没有变动。这导致两端都浪费了资源。

POSTGREsql能较好地解决这个问题。POSTGREsql是个开源数据库,功能齐全,性能优异,其好处这里不多描述,大家可以去(http://www.POSTGResql.org)了解.

POSTGREsql有两个sql语句 ListEN和NOTIFY。
ListEN name 让当前连接处于监听状态,监听名为name的NOTIFY的到来。
NOTIFY name 发送名为name的NOTIFY事件给之前已经ListEN name的所有客户端,

NOTIFY事件格式含有name和PID两项,ListEN方可以根据PID项获知是哪个进程发送。举个例子:所有客户端想及时了解表AAA更改事件,于是它们就发送ListEN AAA命令监听该事件的发生(取AAA名,只是直观点,主要看大家的约定)。当某一个客户端修改了表AAA,就发送NOTIFY AAA命令,于是所有客户端就收到了这个通知,知道表AAA已经被别人修改。

ListEN/NOTIFY具体应用请看POSTGREsql文档。

俗话,好马还要好鞍。既然数据库有如此好的功能,若接口不支持,也是白搭。POSTGREsql的各种接口目前只有C接口libpq.dll和JAVA接口JDBC有封装这功能,其余接口如ODBC,olEDB等都没封装,原因是,不当当是接口要封装了此功能,同时客户应用程序要有监听机制,才可以收到这些“不请自来的”的通知。C和JAVA可以设计成多线程,让某个线程阻塞IO进行监听,另一线程可以正常工作,是不会影响应用的运行的。而其他用ODBC接口C的应有程序如PB、VFP等,很难设计成多线程,所以这些接口封装ListEN/NOTIFY也没有多大意义。

既然应有程序不是多线程,但windows操作系统是多线程,是否可将这些“不请自来的”的通知转化为windows的消息流呢?而大部分应用程序是可以处理自定义消息的。答案是可以的,这是我在ODBC封装NOTIFY/ListEN的思路。在ODBC中非调用时间执行WSAAsyncSELEct,当一个“不请自来的”通知(其实网络包)到达时,会将网络事件转化为消息,应用程序可以设计messaGE_HANDLE来处理这些消息。

把PsqlODBC8.01.02版本的源程序稍微修改后,重新编译,使ODBC封装了此功能。经测试,在各种开发语言是可以成功运行的。具体的使用方法请参照压缩包里的“说明”文挡和例子。

下载http://download.csdn.net/user/Trainee

大佬总结

以上是大佬教程为你收集整理的POSTGRESQL 让客户端互相通信全部内容,希望文章能够帮你解决POSTGRESQL 让客户端互相通信所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: