在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/PHP  網(wǎng)絡(luò)安全  HTML/ 如何使用workerman同時(shí)發(fā)起100個(gè)wss客戶端

如何使用workerman同時(shí)發(fā)起100個(gè)wss客戶端

需要同時(shí)發(fā)起100個(gè)wss客戶端,現(xiàn)在的做法是寫(xiě)100個(gè)start文件,類似

php start_1.php start
php start_2.php start
php start_3.php start
php start_4.php start
php start_5.php start
....

那么管理又麻煩了,比如我想看看是不是都在正常運(yùn)行,我要發(fā)起100遍

php start_{num} status

如果中途增加,或者停止了一部分,我忘記了哪些停止或者哪些在開(kāi)始,還得一遍一遍來(lái)檢查

請(qǐng)問(wèn)有什么辦法來(lái)管理這100個(gè)wss客戶端嘛?

注:運(yùn)行環(huán)境,非windows

回答
編輯回答
真難過(guò)

使用下面的 python 腳本,你可以輕松實(shí)現(xiàn)多開(kāi)

# -*- coding: utf-8 -*-
'''
同時(shí)運(yùn)行多個(gè)進(jìn)程,用法:
    python3 xx.py <進(jìn)程數(shù)量> <進(jìn)程啟動(dòng)參數(shù)>


@author: 李毅
'''
import asyncio
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, REMAINDER


async def single(wid, cmd):
    p = await asyncio.create_subprocess_exec(*cmd)
    print('#{} pid={} 已經(jīng)啟動(dòng)'.format(wid, p.pid))
    await p.communicate()
    print('#{} pid={}, 代碼={} 已經(jīng)結(jié)束'.format(wid, p.pid, p.returncode))


async def main(loop, args):
    if not args.worker or not len(args.cmd):
        return
    ps = [single(i, args.cmd) for i in range(args.worker)]
    return await asyncio.gather(*ps)


if __name__ == '__main__':
    parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
    parser.add_argument('worker', type=int, help='進(jìn)程數(shù)')
    parser.add_argument('cmd', nargs=REMAINDER, help='命令參數(shù),例如: "sleep 30"')
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop, parser.parse_args()))

舉例:同時(shí)開(kāi)啟 10 個(gè) ping -c4 baidu.com 進(jìn)程

python3 a.py 3 ping -c4 baidu.com

輸出如下

PING baidu.com (123.125.115.110) 56(84) bytes of data.
#1 pid=137 已經(jīng)啟動(dòng)
#2 pid=138 已經(jīng)啟動(dòng)
#0 pid=139 已經(jīng)啟動(dòng)
PING baidu.com (220.181.57.216) 56(84) bytes of data.
PING baidu.com (123.125.115.110) 56(84) bytes of data.
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=1 ttl=52 time=38.0 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=55 time=36.3 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=1 ttl=52 time=38.0 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=2 ttl=52 time=37.9 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=55 time=36.2 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=2 ttl=52 time=37.6 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=3 ttl=52 time=37.9 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=55 time=36.1 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=3 ttl=52 time=37.8 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=4 ttl=52 time=37.9 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 37.916/37.955/38.024/0.199 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=4 ttl=55 time=36.1 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 36.113/36.218/36.374/0.254 ms
#1 pid=137, 代碼=0 已經(jīng)結(jié)束
#2 pid=138, 代碼=0 已經(jīng)結(jié)束
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=4 ttl=52 time=37.7 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 37.647/37.818/38.060/0.249 ms
#0 pid=139, 代碼=0 已經(jīng)結(jié)束
2017年12月16日 21:56