开发者社区> 问答> 正文

Linux C++ 服务端运行时刻接受输入。

用c/s模型写了个socket通信的程序。现在想要让服务端能在运行时刻(一直在接受客户端的请求并且处理)检查标准输入或者某个文件,从而来对服务端进行控制(比如停止或者启用某项服务,或者多某项服务的参数进行改变)。那么通过什么方法可以达到这一目的呢?

我现在的想法是,让服务端支持多线程,其中一个线程每隔0.5秒检查某一个文件或者标准输入。

我现在的服务端是用多进程来支持多个客户端的。不知道这样写会不会有问题?

有没有其他的一些办法呢?

Good Luck :)

展开
收起
a123456678 2016-06-12 15:27:46 2076 0
1 条回答
写回答
取消 提交回答
  • 先运行Socket监听服务程序,同时创建一个0.5s轮询标准输入的线程,然后当每一个客户端连接时为它创建一个进程保持双向连接,当客户端通过Socket发送服务请求时,通过向Socket监听服务程序发送进程消息,然后由轮询线程来执行请求?对这种做法我不太支持,1)为每一个客户创建一个进程开销大,一般不建议这么做。2) 轮询你所说的标准输入,让人摸不着头脑,为什么不等到有客户请求时再去检查处理?3)多进程间通讯效率低且麻烦。

    建议做法: 运行Socket监听服务程序,在指定端口监听客户连接,同时打开标准输入返回句柄(windows平台)或描述符(Linux平以),对每个客户连接,创建一个对应的线程,并将句柄或描述符通过线程参数传递给它,当客户发送服务请求指令(自已定义协议),对应的线程直接访问标准输入的句柄或描述符来处理即可。(注意多线程访问同一资源时的同步处理)

    2019-07-17 19:34:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载