文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>网络客户端与服务器并发连接非阻塞socket

网络客户端与服务器并发连接非阻塞socket

时间:2010-07-02  来源:zhaohang3031

首先,了解下阻塞和非阻塞:

在阻塞模式下, 程序在调用接收函数时(如recv), 如果没有数据到达, 此函数会一直等待, 即当前线程会被阻塞, 直到有数据时才返回!

在非阻塞模式下, 程序在调用接收函数时, 接收函数会立即返回, 调用方还可以进行其它操作, 而当有数据到达进, 操作系统会通过某些方法(如事件)来通知你!

再了解下SocketServer模块中可供使用的类:
BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。

TCPServer/UDPServer:基本的网络同步TCP/UDP服务器。

UnixStreamServer/ UnixDatagramServer:基本的基于文件同步TCP/UDP服务器

ForkingMixIn/ ThreadingMixIn:实现了核心的进程化或线程化的功能;作为混合类,与服务器类一并使用以提供一些异步特性;这个类不会直接实例化。

ForkingTCPServer/ ForkingUDPServer:ForkingMixIn和TCPServer/UDPServer的组合。

BaseRequestHandler:包含处理服务请求的核心功能。这个类只用于派生,所以不会生成这个类的实例可以考虑使用StreamRequestHandler或DatagramRequestHandler。

StreamRequestHandler/ DatagramRequestHandler:用于TCP/UDP服务器的服务处理工具。

下面我们正式进入主题,这里我们采用StreamRequestHandler和ThreadingTCPServer来实现客户端与服务器并发连接非阻塞socket。

ThreadingTCPServer派生自ThreadingMixIn,主要实现核心的进程化合线程化功能。

StreamRequestHandler主要用于用于TCP/UDP服务器的服务处理工具。

 

一、创建SocketServerTCP服务器:

import SocketServer
from SocketServer import StreamRequestHandler as SRH
from time import ctime
  
host = ''
port = 3130
addr = (host,port)
  
class Servers(SRH):
    def handle(self):
        print 'got connection from ',self.client_address
        self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime()))
        while True:
            data = self.request.recv(1024)
            if not data: break
            print data
            self.request.send(data)
  
print 'server is running....'
server = SocketServer.ThreadingTCPServer(addr,Servers)
server.serve_forever()


 

二、创建SocketServerTCP客户端

from socket import *
  
host = 'localhost'
port = 3130
bufsize = 1024
addr = (host,port)
client = socket(AF_INET,SOCK_STREAM)
client.connect(addr)
  
while True:
    data = raw_input()
    if not data or data=='exit':
        break
    client.send('%s\r\n' % data)
    data = client.recv(bufsize)
    if not data:
        break
    print data.strip()
  
client.close()


相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载