将一个工程的某一个模块单独出来进程化

cxx_cxx 2018-11-30 03:14:54
最近接到个任务,要将服务端mts项目中的一个报警模块单独进程化,报警模块与mts存在接口互相调用情况。问下大神该用什么方式比较好实现呢,目前报警模块就2个CPP
...全文
652 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxx_cxx 2018-12-15
  • 打赏
  • 举报
回复
跟封装有关吗?管道名称传入了,是按照管道命名标准来命名的
  • 打赏
  • 举报
回复
引用 20 楼 cxx_cxx 的回复:
多谢各位的建议,最终是用命名管道来实现,现在又遇到问题了,在服务端创建两个命名管道后起一个进程,将管道名作为参数传给起来的那个进程(客户端),客户端进程在new管道消息类的对象的时候抛出bad allocation错误,请问这是什么原因呢?这个消息管道类是用的其它部门封装的一个库,在server端new正常,为啥会在(client端)new失败呢
需要问封装的人。是否需要传入参数?管道名称应当要传入吧?
cxx_cxx 2018-12-14
  • 打赏
  • 举报
回复
多谢各位的建议,最终是用命名管道来实现,现在又遇到问题了,在服务端创建两个命名管道后起一个进程,将管道名作为参数传给起来的那个进程(客户端),客户端进程在new管道消息类的对象的时候抛出bad allocation错误,请问这是什么原因呢?这个消息管道类是用的其它部门封装的一个库,在server端new正常,为啥会在(client端)new失败呢
  • 打赏
  • 举报
回复
引用 16 楼 cxx_cxx 的回复:
socket两个进程间怎样实现函数调用啊,以前接触的socket都是用来收发消息,但现在的情况是本来是一个工程的两个模块而已,包含头文件后就直接调用另一个模块接口实现了,现在需要将其中一个模块单独成进程,用socket怎样实现进程间函数调用呢?
或者用这个https://www.cnblogs.com/hbccdf/p/rcf_demo.html 封装好的RCF
  • 打赏
  • 举报
回复
引用 16 楼 cxx_cxx 的回复:
socket两个进程间怎样实现函数调用啊,以前接触的socket都是用来收发消息,但现在的情况是本来是一个工程的两个模块而已,包含头文件后就直接调用另一个模块接口实现了,现在需要将其中一个模块单独成进程,用socket怎样实现进程间函数调用呢?
socket还是有点麻烦的。如果懂就不麻烦。 这样吧,这里有不少例子,你看一下。我个人推荐用命名管道的方式,或者共享内存的方式。 https://www.cnblogs.com/funblogs/p/7675515.html 如果觉得不合适,你看一下自己的项目适合哪种,选一种合适的,合自己思路的就好。
cxx_cxx 2018-12-04
  • 打赏
  • 举报
回复
socket两个进程间怎样实现函数调用啊,以前接触的socket都是用来收发消息,但现在的情况是本来是一个工程的两个模块而已,包含头文件后就直接调用另一个模块接口实现了,现在需要将其中一个模块单独成进程,用socket怎样实现进程间函数调用呢?
smwhotjay 2018-12-04
  • 打赏
  • 举报
回复

mailslot 油槽,数据少量时 用用还是可以的。
super_admi 2018-12-03
  • 打赏
  • 举报
回复
很显然,用Socket是比较好的做法,但是Socket太底层了,一般来说不太符合大众需求。

考虑到此模块可能会有后续需求,所以建议使用http服务来做这个事情。网上有现成的非常小的http服务器实现,只要你在模块中插入进去就可以了。
赵4老师 2018-12-03
  • 打赏
  • 举报
回复
共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的:
·进程之间松耦合
·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。
·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。
·方便在线开关服务,只需删除或创建该临时文本文件即可。
·方便实现分布式和负载均衡。
·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满)
·……
缺点我就不补充了。
smwhotjay 2018-12-02
  • 打赏
  • 举报
回复
单进程蛮好,非要分进程,劳什子
赵4老师 2018-12-02
  • 打赏
  • 举报
回复
就算支持读写锁的环境,同时可用的读写锁总数也受限。
赵4老师 2018-12-02
  • 打赏
  • 举报
回复
别忘了还有很多不支持读写锁的开发环境和开发语言。
RamDisk也写磁盘?
蒋晟 2018-12-02
  • 打赏
  • 举报
回复
顺便说一句,Windows里每个进程里的读写锁数上限是16777215个……你能在系统里创建这么多个进程算你本事。
蒋晟 2018-12-02
  • 打赏
  • 举报
回复
可以用socket啊(也可以用更高层的TCP/IP),这个是双向的。命名管道是单向的,双向不注意的话互相等对方发信息会死锁。数据再大可以考虑共享内存。要跨平台做进程间通讯可以用boost啊qt啊什么的,用不着自己写。不考虑跨平台的话,用COM也行。 像楼上改文件名比较扯淡,读写加锁就能搞定的事情还要写一遍磁盘,真当NTFS的文件改名记录不用钱的?不会加锁可以用Boost.Interprocess之类的类库来替你加啊。Node.js这样类库少的还好说,C++类库这么多还去发明轮子,问题是发明的还没人家好。
蒋晟 2018-12-02
  • 打赏
  • 举报
回复
人家分个模块出来而已,什么时候说过要换开发环境或者开发语言了?总共两个进程而已,同时可用的读写锁数难道连两个都没有?你人傻了?
赵4老师 2018-12-01
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
@风轻云淡_ 2018-12-01
  • 打赏
  • 举报
回复
用http通信呗,省劲简单,接口调用首选。
threenewbee 2018-11-30
  • 打赏
  • 举报
回复
单机的话,用互斥量,可能考虑不同计算机,用网络
cxx_cxx 2018-11-30
  • 打赏
  • 举报
回复
不是Qt,客户端是用Qt写的,服务端是用来处理客户端发过来的消息处理逻辑,现在我的任务是需要将服务端的一个模块报警模块单独出来处理成一个进程,要求与原来的服务端交互,包括之间的函数调用等等
  • 打赏
  • 举报
回复
引用 2 楼 cxx_cxx 的回复:
用哪种方式比较合适,兄dei
根据工程的情况挑选,或者那种都行,比如远程过程调用,邮槽。邮槽在QT中用的很多。你用这个?
加载更多回复(2)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧