Skip to content

LeventureQys/Qt_ActiveServer_Main

Repository files navigation

Qt_ActiveServer_Main

Qt Active服务器主程序

技术实践:ActiveQt Server 开发:

我是个Windows平台上的程序员,开发主要以Windows应用程序为主。目前在当前平台上我们做了很多进程间通信开发的尝试,包括但不限于Windows窗体消息(SendMessage等),共享内存,COM组件,已知的进程间通信方案还有socket通信(没必要,一般用于网络通信)和D-Bus方案(部分平台貌似不兼容,尚未了解)。

关于上述方案,Windows窗体消息和共享内存的方案我居然没写博客,之后可能会补上,这里暂时不做讨论。

先说开发场景:现在我有一个主框架或者说主程序,会有很多别的模块需要在外部开发,这些模块可能会需要用到主框架中的信息,或者说一些接口来调用一些特定的功能。比如说我一个课堂教学模块,可能需要实现屏幕广播,语音广播,资料下发等功能。出于低耦合的基本原则,我们当然不希望每个这样的教学模块里都实现一个类似的功能,这样不仅是对开发资源的极大浪费,也会极影响整个程序的维护难度。所以我们希望所有类似的功能都集成到一个主框架里,任外部的模块去调用功能,将二者隔离开来,这样不仅极大地提高了程序复用的可能,也能提高开发速度。

这个和之前的SendMessage方式最大的区别就是:如果想用SendMessage传递信号,首先需要两个应用程序之间互相获得句柄就挺麻烦的,需要从启动项传入然后再给予回执。其次SendMessage可能导致线程间不同步等情况出现,可能会导致部分程序的渲染、启动等县城不同步产生的意外问题。最主要的一点,SendMessage智能发送消息码,而这些消息码都是需要提前指定好的,而且接收方也不一定能统一,所以需要特定的消息码特定处理,很难进行全局的消息码处理。这些都是在之前的主框架开发中暴露出来的问题。

但是窗体消息有没有什么优点呢?当然是有的,最大的优点就是可靠,且开发简单。消息的发送是相当可靠的,而且一般的框架都会有一个关于窗体消息的收发机制,只需要重写或者指定接收函数即可,对于小组件或者进程内部可以采取类似的方法。

但我们是一个中心组件,是为了给其他进程提供服务的,所以我们这个中心服务需要更加简单,外部更加易用,所以我们要向所有模块的开发者提供适当的接口以调用,而且接口必须足够简单。

About

Qt Active服务器主程序

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published