select()函数同时进行I / O

时间:2015-05-26 13:21:16

标签: python multithreading sockets select io

我正在尝试实现一个多线程服务器,它可以同时处理来自客户端的读/写。 服务器方法:

当每条消息以他们要发送消息的用户的名称开头时,客户端连接到服务器,然后是' |'。它看起来像这样:" USER_NAME | DATA"。

收到数据后,服务器通过{socket:username}字典知道发送数据的位置。一切都很好,除了客户无法同时处理读写的事实。我搜索了一个方法来处理它,我找到了select()函数,但由于缺少示例 - 我无法在我的代码中集成该函数。

因此我有两个问题:

  1. select()函数应该在服务器端吗?它会更有效率吗?
  2. 有人可以用简单的例子演示select()方法在客户端的外观吗?
  3. 提前致谢!!!

1 个答案:

答案 0 :(得分:0)

虽然select()可以使用,但如果你想在select上阻塞系统时做其他事情,你必须使用线程。

看看glib的GIO库。在那里,您可以将回调连接到要监视或操作的操作,例如“来自客户端的连接”。

只需打开一个套接字,然后使用其文件描述符挂起gio.add_watch。这是使用giochannels的a mini-tutorial