python select 与 epoll 多路复用模型的使用规范

本文详细介绍了Python中select和epoll多路复用模型的使用,适用于Windows和Linux环境。通过代码示例展示了客户端测试,特别强调了在Linux环境下设置Epoll为边缘触发的重要规范。
摘要由CSDN通过智能技术生成

(Python系列)Python脚本核心编程

(服务器网络篇) python select 与 epoll 多路复用模型的使用规范



前言

学习过网络编程的朋友,不管是java,c++阵营还是go阵营,不熟悉python中对于 网络多路复用模型的使用,可以参考这篇文章,代码中所带注释一定能帮到你。

套接字为非阻塞, Epoll 设置为边缘触发


提示:以下是本篇文章正文内容

一、Windows 端多路复用模型 Select

# !/usr/bin/env Python2
# -*- coding: utf-8 -*-
# @Author   : 得灵
# @FILE     : socket_test.py
# @Time     : 2021/1/9 14:45
# @Software : PyCharm
# @Introduce: This is
import select
import Queue
import struct
import socket


def int_to_bytes(convert_val):
    format_str = '<i'
    s = struct.Struct(format_str)
    return s.pack(convert_val)


def str_to_bytes(convert_val):
    format_str = '<' + str(len(convert_val)) + 's'
    s = struct.Struct(format_str)
    return s.pack(convert_val)


def bytes_to_int(convert_data):
    format_str = '<i'
    s = struct.Struct(format_str)
    return s.unpack(convert_data)[0]


def bytes_to_str(convert_data, data_len):
    format_str = '<' + str(data_len) + 's'
    s = struct.Struct(format_str)
    return s.unpack(convert_data)[0]


def recv_fixed_sz_data(sock, recv_sz):
    total = 0
    result_data = ''
    while total < recv_sz:
        data = sock.recv(recv_sz - total)
        if data:
            result_data += data
            total += len(data)
        else:
            return int_to_bytes(0)
    return result_data


def recv_client_msg(sock):
    data_len = bytes_to_int(recv_fixed_sz_data(sock, 4))
    if not data_len:
        return None
    msg = bytes_to_str(recv_fixed_sz_data(sock, data_len), data_len)
    if not msg:
        return None
    return msg


server_sock = socket.socket(socket.AF_INET,
    socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值