unix/linux 系统实现多个进程监听同一个端口
来源:互联网 发布:手机淘宝查看卖家信誉 编辑:程序博客网 时间:2024/05/17 05:53
一直疑惑一个应用app如何才能以多进程,多线程的方式运行。对于多线程可能很好理解,我们只要在进程中启用多线程的模式即可。也就是来一个请求,我们就用函数pthread_create()启用一个线程即可。这样我们的应用就可以在单进程,多线程的模式下工作。
但我们知道一个应用app通常工作在多进程,多线程的模式下,它的效率是最高的。那么我们如何才能做到多进程模式呢?经验告诉我们,如果多次启动一个进程会报错:“Address already in use!"。这是由于bind函数导致的,由于该端口号已经被监听了。
其实我们只要在绑定端口号(bind函数)之后,监听端口号之前(listen函数),用fork()函数生成子进程,这样子进程就可以克隆父进程,达到监听同一个端口的目的。好了,废话不多说,我们看一下具体代码。
接下来我们来启动一下,查看结果如下:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 500 3019 2370 0 80 0 - 1315 - tty2 00:00:01 bash
0 S 500 7332 3019 0 80 0 - 466 - tty2 00:00:00 multi_proc
1 S 500 7333 7332 0 80 0 - 466 - tty2 00:00:00 multi_proc
1 S 500 7334 7332 0 80 0 - 466 - tty2 00:00:00 multi_proc
1 S 500 7335 7332 0 80 0 - 466 - tty2 00:00:00 multi_proc
1 S 500 7336 7332 0 80 0 - 466 - tty2 00:00:00 multi_proc
1 S 500 7337 7332 0 80 0 - 466 - tty2 00:00:00 multi_proc
1 S 500 7338 7332 0 80 0 - 466 - tty2 00:00:00 multi_proc
我们可以看到,确实有多个服务(multi_proc)成功起来了,那么这些进程是否能够监听9988这个端口,并且产生竞争呢?我们来写一段客户端的代码做个测试。客户端主要是循环多次请求服务器,并发送字符串。
请求执行后,我们看一下,服务器打印的结果!
pid=7738, mesg: Hello Server!
pid=7736, mesg: Hello Server!
pid=7735, mesg: Hello Server!
pid=7734, mesg: Hello Server!
pid=7733, mesg: Hello Server!
pid=7733, mesg: Hello Server!
pid=7737, mesg: Hello Server!
pid=7737, mesg: Hello Server!
pid=7736, mesg: Hello Server!
pid=7735, mesg: Hello Server!
pid=7734, mesg: Hello Server!
pid=7732, mesg: Hello Server!
pid=7733, mesg: Hello Server!
pid=7738, mesg: Hello Server!
pid=7737, mesg: Hello Server!
pid=7736, mesg: Hello Server!
pid=7735, mesg: Hello Server!
pid=7734, mesg: Hello Server!
pid=7732, mesg: Hello Server!
pid=7733, mesg: Hello Server!
pid=7738, mesg: Hello Server!
pid=7737, mesg: Hello Server!
pid=7736, mesg: Hello Server!
pid=7735, mesg: Hello Server!
pid=7734, mesg: Hello Server!
pid=7732, mesg: Hello Server!
pid=7733, mesg: Hello Server!
pid=7738, mesg: Hello Server!
pid=7737, mesg: Hello Server!
pid=7738, mesg: Hello Server!
我们可以看出,这些进程都能监听同一个接口,而且还相互竞争,提高程序效率!
- unix/linux 系统实现多个进程监听同一个端口
- unix/linux 系统实现多个进程监听同一个端口
- 多个进程可以监听同一个端口?
- 单个进程监听多个端口及多个进程监听同一个端口
- 多个进程能否监听同一个端口号?
- 两个进程,或者多个进程同时监听一个端口,邦定同一个端口,
- 多进程监听同一个端口 php
- 多进程监听同个端口及单进程监听多个端口的php版本实现
- Linux 查看 系统正在监听的端口的进程
- linux下同一个tomcat部署多个项目 同一个端口
- Linux 杀同一个关键词的多个进程
- 多个按钮用同一个监听器监听
- Linux网络编程——端口复用(多个套接字绑定同一个端口)
- Linux网络编程——端口复用(多个套接字绑定同一个端口)
- Linux网络编程——端口复用(多个套接字绑定同一个端口)
- Linux网络编程——端口复用(多个套接字绑定同一个端口)
- Linux通过监听的端口管理进程
- Apache监听多个端口
- (06)重做日志损坏的恢复
- EasyHook应用层inline hook实例
- Unique Binary Search Trees - LeetCode
- 使django与数据库保持长连接
- 关于项目中制定的基本规范
- unix/linux 系统实现多个进程监听同一个端口
- Oracle RAC 并发与架构【偶像大神--dave】
- LLVM language 参考手册(译)(3)
- R3文件占坑大法
- C++按值返回、按址返回、按别名返回开销的区别
- Oracle RAC Cache Fusion 机制 详解 【偶像大神--dave】
- 腾讯大规模Hadoop集群实践
- 32位的SSDT表结构浅析
- [LeetCode] 3Sum Closest