select() 函数同时用于 I/O
select() function for simultaneously I/O
我正在尝试实现一个多线程服务器,它可以同时处理来自客户端的 read/write。
服务器方法:
客户端连接到服务器,当每条消息都以他们想要将消息发送到的用户的名称开头时,后跟“|”。它看起来像这样:"USER_NAME|DATA".
服务器收到数据后,通过{socket:username}的字典知道将数据发送到哪里。一切都很好,除了客户端无法处理同时读写的事实。我搜索了一种处理该问题的方法,并找到了 select() 函数,但由于缺少示例 - 我无法将该函数集成到我的代码中。
因此我有 2 个问题:
- select() 函数应该在服务器端吗?会不会更有效率?
- 有人可以用一个简单的例子来演示 select() 方法在客户端应该是什么样子吗?
提前致谢!!!
虽然 select() 可以工作,但如果您想在系统阻塞时做其他事情,则必须使用线程 select。
看看 glib 的 GIO 库。在那里,您可以将回调连接到您想要监控或采取行动的操作,例如来自客户端的“连接”。
只需打开一个套接字,并使用其文件描述符挂上一个gio.add_watch。 a mini-tutorial 使用 giochannels。
我正在尝试实现一个多线程服务器,它可以同时处理来自客户端的 read/write。 服务器方法:
客户端连接到服务器,当每条消息都以他们想要将消息发送到的用户的名称开头时,后跟“|”。它看起来像这样:"USER_NAME|DATA".
服务器收到数据后,通过{socket:username}的字典知道将数据发送到哪里。一切都很好,除了客户端无法处理同时读写的事实。我搜索了一种处理该问题的方法,并找到了 select() 函数,但由于缺少示例 - 我无法将该函数集成到我的代码中。
因此我有 2 个问题:
- select() 函数应该在服务器端吗?会不会更有效率?
- 有人可以用一个简单的例子来演示 select() 方法在客户端应该是什么样子吗?
提前致谢!!!
虽然 select() 可以工作,但如果您想在系统阻塞时做其他事情,则必须使用线程 select。
看看 glib 的 GIO 库。在那里,您可以将回调连接到您想要监控或采取行动的操作,例如来自客户端的“连接”。
只需打开一个套接字,并使用其文件描述符挂上一个gio.add_watch。 a mini-tutorial 使用 giochannels。