• 客户端和服务器之间的通信


    1. 消息队列(Message Queue)

    消息队列是一种进程间通信方式,可以将消息从一个进程发送到另一个进程,异步地处理消息。消息队列有多种实现方式,如 POSIX 消息队列、RabbitMQ 等。

    优点:

    • 可以实现异步通信,不需要等待接收方返回结果,提高系统的响应速度和并发性能。
    • 可以实现解耦,因为消息的接收方和发送方不需要知道对方的地址,只需要通过队列进行通信即可。

    缺点:

    • 消息队列需要额外的服务器和系统资源来维护,增加了系统复杂度和运维难度。
    • 当消息队列中有大量消息时,需要花费额外的时间和资源进行消息的调度和传输,影响系统的性能。

    示例代码(Python + RabbitMQ):

    1. import pika
    2. # 连接 RabbitMQ 服务器
    3. connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    4. channel = connection.channel()
    5. # 声明队列
    6. channel.queue_declare(queue='hello')
    7. # 发送消息
    8. channel.basic_publish(exchange='', routing_key='hello', body='Hello, world!')
    9. # 关闭连接
    10. connection.close()

    1. 共享内存(Shared Memory)

    共享内存是一种进程间通信方式,可以让多个进程共享同一块物理内存。共享内存有多种实现方式,如 System V 共享内存、POSIX 共享内存等。

    优点:

    • 共享内存的速度很快,因为多个进程可以直接访问同一块内存区域,不需要进行复制和传输。
    • 共享内存比较简单,只需要操作系统的支持,不需要独立的服务器和额外的网络通信。

    缺点:

    • 共享内存需要进行锁机制和同步机制,否则容易出现竞态条件和数据不一致的问题。
    • 使用共享内存需要对内存管理、进程和线程同步等底层技术有深入的理解,否则容易出现内存泄漏、死锁等问题。

    示例代码(Python + mmap):

    1. import mmap
    2. import os
    3. # 打开文件
    4. with open('data.bin', 'r+b') as f:
    5. # 创建内存映射
    6. mm = mmap.mmap(f.fileno(), 0)
    7. # 写入数据
    8. mm.write(b'Hello, world!')
    9. # 同步到磁盘
    10. mm.flush()
    11. # 关闭内存映射
    12. mm.close()

    1. 进程间管道(Pipe)

    进程间管道是一种进程间通信方式,可以在两个进程之间建立一个管道,实现单向或双向的数据传输。进程间管道有多种实现方式,如匿名管道(Anonymous Pipe)、命名管道(Named Pipe)等。

    优点:

    • 进程间管道比较简单,只需要操作系统的支持,不需要独立的服务器和额外的网络通信。
    • 进程间管道可以进行双向通信,比较灵活。

    缺点:

    • 进程间管道只能用于进程间的通信,不能用于分布式系统中的通信。
    • 进程间管道只能进行一对一的通信,不能进行一对多或多对多的通信。

    示例代码(Python):

    1. import os
    2. # 创建管道
    3. r, w = os.pipe()
    4. # 创建子进程
    5. pid = os.fork()
    6. if pid > 0:
    7. # 在父进程中写入数据
    8. os.close(r)
    9. w = os.fdopen(w, 'w')
    10. w.write('Hello, world!')
    11. w.close()
    12. else:
    13. # 在子进程中读取数据
    14. os.close(w)
    15. r = os.fdopen(r, 'r')
    16. message = r.read()
    17. print(message)
    18. r.close()

    1. Socket

    Socket 是一种基于网络协议的进程间通信方式,可以让多个进程在不同的计算机之间进行通信。Socket 有多种实现方式,如 TCP Socket、UDP Socket 等。

    优点:

    • Socket 可以实现网络通信,可以让多个进程在不同的计算机之间进行通信。
    • Socket 可以进行双向通信,比较灵活。

    缺点:

    • Socket 基于网络协议,需要进行网络编程,代码比较复杂,容易出现协议错误等问题。
    • Socket 需要独立的服务器和额外的网络通信,增加了系统复杂度和运维难度。

    示例代码(Python + TCP Socket):

    1. import socket
    2. # 创建 Socket 对象
    3. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4. # 绑定 IP 地址和端口号
    5. server_socket.bind(('localhost', 8888))
    6. # 监听连接
    7. server_socket.listen(5)
    8. while True:
    9. # 接受连接
    10. client_socket, client_address = server_socket.accept()
    11. print('Client connected:', client_address)
    12. # 接收数据
    13. message = client_socket.recv(1024)
    14. print('Received:', message.decode())
    15. # 发送数据
    16. client_socket.send('Hello, world!'.encode())
    17. # 关闭连接
    18. client_socket.close()

  • 相关阅读:
    桌面显示计算机信息,并实现批处理自动化
    java毕业生设计学生用品采购系统计算机源码+系统+mysql+调试部署+lw
    2022年了你还不了解箭头函数与普通函数的区别吗?
    2022-11-02 myql-StarRocks-Join 查询优化
    python的一些知识点
    TAP 系列文章8 | TAP 学习中心——通过动手教程来学习
    dubbo telnet使用
    (1)paddle---在anaconda中安装paddle环境
    YUV采样格式
    数字信号采集保存与处理通用过程
  • 原文地址:https://blog.csdn.net/m0_74265396/article/details/134317256