【问题标题】:Python socketserver or socket with threadPython socketserver 或带线程的套接字
【发布时间】:2016-06-07 21:17:23
【问题描述】:

我是模块套接字的新手,我正在学习如何实现它。我目前已经编写了这个基本服务器。

import socket               

s = socket.socket()         
host = "Some IP" 
port = 12345                
s.bind((host, port))        

print "Setting up server on", host + ":" + str(port)

s.listen(5)                 

while True:
    c, addr = s.accept()     

    print 'Got connection from', addr
    c.send('Thank you for connecting.')
    print c.recv(1024)

c.close() 

但是,我意识到这台服务器一次只能处理一个客户端。为了进一步培训,我想一次处理多个客户。所以我做了一个研究,发现了图书馆SocketServer。我也听说过线程化常规socket模块的方法,所以每一个新的连接都会创建一个新的线程。我找到的信息还不够。请帮助我了解我发现的这两种方法之间的区别以及在哪里使用哪一种。

提前致谢。

【问题讨论】:

  • 你看过zeromq吗?它为套接字操作/服务器写入添加了一个非常有用的层。 Python 绑定可通过pyzmq (pip install pyzmq) 获得。它也非常快。
  • 谢谢,我会看看它,但我现在更喜欢使用标准模块,因为我目前正在学习它。

标签: python multithreading sockets server connection


【解决方案1】:

socket 库是非常底层的,大部分东西你真的必须自己实现。

SocketServer 更高级。它在内部使用套接字库,并提供了一个简单的接口,允许您一次处理多个客户端,并且您不必担心使用套接字所涉及的整个低级内容。

查看此处的示例并将它们与您自己的代码进行比较。您可能会看到差异。 https://docs.python.org/2/library/socketserver.html#examples

【讨论】:

  • 但基本上他们做同样的事情对吗?多线程 + 套接字和服务器套接字。
  • 是的,socket 模块可以用于客户端和服务器。 SocketServer只能用于服务器,但一般比socket模块好用得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2014-10-18
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
相关资源
最近更新 更多