`

python 土拿渡 socket

阅读更多
下面和大家分享一下tornado 如何实现异步处理
下面的程序只能支持多线程的异步处理方式,扩展性一般,如果,可以改进为进程的方式扩展性会好很多 :)
之所以使用tornado 是因为,tornado 性能比较乐观,
具体比较请看下面的文章:http://programmingzen.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/
Client 端代码

>>> import socket
>>> d = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> d.connect((HOST,PORT))


Server 端代码,需要Linux 服务器
#encoding = utf-8
import errno
import functools
import socket
import time
import os
import traceback
import memcache
from tornado import ioloop, iostream
from threading import Thread
from Queue import Queue
from config import *

streamDict = {}
streamRequests = {}

################################# Utils ###############################
def stream_add(stream,count):
    """
    添加 Stream
    """
    streamkey = str(stream)
    streamDict[streamkey] = (stream,0)
    streamRequests[streamkey] = Queue()

def stream_remove(streamkey,stream):
    """
    删除 Stream
    """
    try:
        stream.close()
    except:
        pass
    del streamDict[streamkey]
    del streamRequests[streamkey]

################################# Response ###############################
class ClockResponse(Thread):
    """
    定时处理请求接口
    """

    def __init__ (self):
        """
        初始化
        """
        Thread.__init__(self)
        self.flag = True
        self.count = 0

    def run(self):
        """
        运行线程
        """
        while self.flag:
            #打印 LOG,N次/打印
            ct = self.count % 10
            if ct == 0:
                print 'now connections:%s'%(len(streamDict))
            self.count = ct + 1

            #循环处理请求
            for streamkey,(stream,num) in streamDict.items():
                try:
                    #这里返回Response
                    queue = streamRequests[streamkey]
                    print "queue.get()",queue.get()
                    print "q.qsize()",queue.qsize()
                    stream.write('haha')
                except:
                    streamDict[streamkey] = (stream,num+1)
                    #去死吧.......
                    if num>DEAD_VALUE:
                        stream_remove(streamkey,stream)
            time.sleep(SLEEP_TIME)

    def stop(self):
        self.flag = False

################################# Request ###############################
class SocketRequest(object):
    """
    Socket 请求
    """

    def __init__(self, stream, address):
        self.stream = stream
        self.streamkey = str(stream)
        self.address = address
        #开始读取数据
        self.stream.read_until("\r\n", self.on_request)

    def on_request(self,data):
        """
        接收处理请求
        """
        #将数据加载到 Queue
        print "on_request" , data
        queue = streamRequests[self.streamkey]
        queue.put(data)
        #继续读取请求
        self.stream.read_until("\r\n", self.on_request)


def connection_ready(sock, fd, events):
    """
    启动 Connection 监听,处理程序
    """
    while True:
        try:
            connection, address = sock.accept()
        except socket.error, e:
            if e[0] not in (errno.EWOULDBLOCK, errno.EAGAIN):
                raise
            return
        #non-block
        connection.setblocking(0)
        stream = iostream.IOStream(connection)
        #保存stream
        stream_add(stream,0)
        #接收Socket 请求
        SocketRequest(stream,address)


if __name__ == '__main__':
    
    #pidfile = open(os.path.join(settings.PROJECT_PATH,'tornadoServer.pid'),'w')
    #pidfile.write(str(os.getpid()))
    #pidfile.close()
    
    #接收请求
    clock = ClockResponse()
    clock.start()
    
    #定义Socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) #这里的0 dummy protocol for TCP
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.setblocking(0)
    sock.bind(("", SERVER_PORT))
    sock.listen(9999)
    
    #获得ioloop
    io_loop = ioloop.IOLoop.instance()
    callback = functools.partial(connection_ready, sock)
    io_loop.add_handler(sock.fileno(), callback, io_loop.READ)

    #启动服务
    try:
        io_loop.start()
    except KeyboardInterrupt:
        io_loop.stop()
        clock.stop()
        print "exited cleanly"




TCP/IP module for linux 2.6 dummy版

1、概述
    英文单词dummy是虚假的意思,dummy版的TCP/IP module就是实现一个虚假的传输层协议,该协议不能完成任何实际的网络通讯。它通过module自身提供的一个经过改造的环回网络设备驱动程序mylo,展示网络数据在TCP/IP协议栈中发送和接收的整个流程。其意义在于为后续的实际的STREAM, DGRAM, RAW的开发提供一个基本的程序框架,以及初步验证这个框架的可行性,同时也帮助更好的理解2.6内核中整个TCP/IP协议栈的实现原理。
                                         

2、编译与安装
    dummy版的module与第一版相比较,在模块划分和Makefile上作了很多改进。当前初步按TCP/IP协议栈的层次结构分为五个模块,下面是整个源代码目录树的基本情况:
    ipv4                      顶层目录。
     |
     |--inet                    inet域,主要完成inet域最顶层的一些基本操作。
     |
     |--application         应用层,现在主要为一个dummy协议的测试应用程序。
     |
     |--transport           传输层,目前只有一个dummy协议。
     |
     |--network             网络层。
     |
     |--datalink              数据链路层,目前只实现了环回网络设备驱动程序mylo。
     |
     |--core                  核心模块,连接数据链路层和网络层,传递它们之间的数据。
     |
     |--include              头文件
     |
     |--load.sh unload.sh     装载和卸载脚本
     |
     |--Makfile env.mk          makefile文件。
分享到:
评论

相关推荐

    senderandreceiver-python.rar_Socket python_python_python socket_

    在Python编程领域,Socket是网络通信的基础,它允许程序作为客户端(Sender)或服务器端(Receiver)进行数据传输。在“senderandreceiver-python.rar”这个压缩包中,我们很可能会找到一个实现简单发送器和接收器...

    Python与Java间Socket通信实例代码

    Python与Java间Socket通信实例代码详解 Python与Java间Socket通信是指在Python和Java两个不同的语言平台之间实现数据交换和通信的过程。Socket是Python和Java中都支持的网络通信机制,可以实现跨语言平台的通信。 ...

    python:socket传输大文件示例

    在Python编程中,Socket是网络通信的基本模块,用于实现不同计算机之间的数据传输。本文将深入讲解如何使用Python的Socket库来传输大文件。文件传输在许多应用中都是必不可少的,例如分布式系统、文件共享和备份等。...

    基于python的socket实现单机五子棋到双人对战

    ### 基于Python的Socket实现单机五子棋到双人对战 #### 概述 本文将详细介绍如何利用Python中的socket库实现一个简单的五子棋游戏,并将其从单机版扩展为支持两人在线对战的版本。通过这个过程,我们将学习到Python...

    python-websocket-socket 消息推送

    Python中的WebSocket和Socket是两种在网络通信中常用的协议,它们在实时数据传输,特别是构建实时交互应用(如在线聊天、股票行情、游戏等)时扮演着重要角色。在本主题中,我们将深入探讨“python-websocket-socket...

    python socket 网络编程

    Python的socket库是进行网络通信的基础模块,它提供了低级别的、原始的套接字接口,使得程序员能够构建自己的网络应用程序,如服务器和客户端。在"python socket 网络编程"这个主题中,我们将深入探讨如何利用socket...

    基于Socket的聊天室Python实现(GUI版)

    资源内容:基于Socket的聊天室Python实现(GUI版) 使用/学习目标:了解 Socket 核心原理 特点:简单、带GUI方便使用 适用人群:想阅读Python源码的初学者,想自己搭建远程聊天室的站长们 可以参考本资源来搭建属于...

    python socket通讯+socket+socket

    Python的socket库是进行网络通信的基础模块,它允许程序员创建自定义的网络协议,实现客户端与服务器之间的数据传输。在本项目中,我们看到有三个关键的组件:客户端(Client)、服务端(Server)和触发端(Trigger...

    python 3.6 socket传输视频

    在Python 3.6中,Socket编程是一种基础的网络通信技术,它允许程序之间通过网络进行数据交换。在这个场景中,我们关注的是如何利用Socket库来实现TCP协议下的视频传输。TCP(Transmission Control Protocol)是一种...

    基于C++, python实现TCP的socket网络传输视频

    【作品名称】:基于C++, python实现TCP的socket网络传输视频 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于TCP...

    Python Socket

    Python Socket是Python编程中用于网络通信的一个模块,它允许程序创建和使用套接字(socket)来发送和接收数据。套接字是网络上的进程间通信(IPC)的基本接口,可以实现不同计算机之间的数据传输。在Python中,我们...

    python socket 网络编程 教程

    Python网络编程教程主要介绍如何使用Python语言开发基于socket的网络应用程序,通过本教程的学习,初学者可以掌握Python在网络编程方面的基础知识和高级特性。本教程采用的示例为聊天程序,旨在通过实例加深对Python...

    python的socket编程

    ### Python的Socket编程 在计算机网络中,socket(套接字)是一种用于进程间通信的机制,它允许不同计算机上的程序通过网络进行双向通信。本文将深入探讨如何使用Python进行socket编程,特别是创建一个简单的图形...

    python多人聊天服务器 socket

    Python多人聊天服务器是一种基于Socket编程实现的网络通信应用,它允许多个用户通过互联网进行实时的文本交流。Socket是网络编程中的基本概念,是进程间通信的一种方式,它为应用程序提供了低级别的、原始的TCP/IP...

    基于Python的socket网络编程

    本主题将深入探讨“基于Python的socket网络编程”,特别是结合Flask框架来搭建能够传输多种类型数据(如文本、图像、音频等)的网站。 首先,让我们了解基础的socket编程。在Python中,socket模块提供了低级的网络...

    Python库 | python-handler-socket-0.2.1.tar.gz

    "python-handler-socket-0.2.1.tar.gz"是一个Python库的压缩包,它很可能包含了一个名为`handler_socket`的库,用于处理套接字(socket)相关的操作。 套接字是计算机网络编程中的基本概念,它提供了进程间通信...

    Python 网络编程 python网络编程 socket

    Python 网络编程_python网络编程_socket Python 网络编程是指使用 Python 语言进行网络通信编程,包括 socket 编程、网络通信协议等方面的内容。下面是对 Python 网络编程的详细介绍: 1. 网络通信的概念 网络...

    Python学习笔记——socket通信相关资源文件

    1. **创建Socket对象**:在Python中,使用`socket.socket()`函数创建一个socket对象,指定协议类型(如TCP/IP)和地址族(如AF_INET)。 ```python import socket s = socket.socket(socket.AF_INET, socket.SOCK_...

    python3socket通信

    在Python编程语言中,Socket模块提供了低级别的、原始的TCP/IP通信能力,是网络编程的基础。"python3socket通信"这个主题主要涵盖了Python3中如何使用socket库进行网络通信的知识点,包括创建服务器端和客户端,以及...

    java_python_socket.zip

    本示例是关于如何使用Java和Python进行Socket通信的演示。 在Java中,Socket类位于`java.net`包下,提供了创建TCP连接的能力。在服务器端,我们需要创建一个ServerSocket监听特定的端口,等待客户端的连接请求。...

Global site tag (gtag.js) - Google Analytics