谈谈异步socket的问题?

Eleven 2008-12-09 08:46:32
各种异步socket,比如select,WSAAsyncSelect,WSAEventSelect,IOCP各种方法的特点的比较,希望大家畅所欲言。谢谢
...全文
188 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
njupt_pz 2012-01-04
  • 打赏
  • 举报
回复
详细请见:
http://www.kuqin.com/networkprog/20070905/876.html
jy514263 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sigh02 的回复:]
我比较关心的是异步调用WSASend/WSARecv的情况下会不会乱序
比如说WSASend先发10个字节,然后调用WSARecv收10,再调WSASend发10个,然后再调WSARecv收5个
会不会第二次WSARecv先收到了?等于是把第一次WSARecv的数据给抢了....
[/Quote]

这个不会, 两个包一起过来倒是会的
sigh02 2008-12-12
  • 打赏
  • 举报
回复
我比较关心的是异步调用WSASend/WSARecv的情况下会不会乱序
比如说WSASend先发10个字节,然后调用WSARecv收10,再调WSASend发10个,然后再调WSARecv收5个
会不会第二次WSARecv先收到了?等于是把第一次WSARecv的数据给抢了....
jy514263 2008-12-12
  • 打赏
  • 举报
回复
客户端的话还是WSAAsyncSelect好用

服务器就用完成端口
scq2099yt 2008-12-12
  • 打赏
  • 举报
回复
各有所长,否则就没有存在的意义了。
sigh02 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jy514263 的回复:]
引用 11 楼 sigh02 的回复:
我比较关心的是异步调用WSASend/WSARecv的情况下会不会乱序
比如说WSASend先发10个字节,然后调用WSARecv收10,再调WSASend发10个,然后再调WSARecv收5个
会不会第二次WSARecv先收到了?等于是把第一次WSARecv的数据给抢了....


这个不会, 两个包一起过来倒是会的
[/Quote]
要是多线程操纵一个socket,不加锁那肯定乱了
Evenque 2008-12-12
  • 打赏
  • 举报
回复
我也来学习一下
目前在select阶段
zchenglin 2008-12-12
  • 打赏
  • 举报
回复
刚开始学习网络方面的编程,大家说的都很有道理啊,要多学习一下了
caitian6 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 DDGG 的回复:]
引用 1 楼 caitian6 的回复:
select 是微软为了适应UNIX下的 select 模型 用消息机制改的,效率不高。 适合小规模(64个SOCKET)。


select的64个SOCKET限制是指一个select等待64个SOCKET吗?
假如我开100个线程,每个线程用一个select等待一个SOCKET应该不受限制吧?
[/Quote]
100个SOCKET 是同一个 ? 还是不同的?
同一个的话, 同步异步就是个大问题。
不同的SOCKET , 有意义吗?
DoItFreely 2008-12-10
  • 打赏
  • 举报
回复
还是WSAAsyncSelect简单,没有IOCP繁琐的线程同步,也没有select/WSAEventSelect的个数限制
DDGG 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caitian6 的回复:]
select 是微软为了适应UNIX下的 select 模型 用消息机制改的,效率不高。 适合小规模(64个SOCKET)。
[/Quote]

select的64个SOCKET限制是指一个select等待64个SOCKET吗?
假如我开100个线程,每个线程用一个select等待一个SOCKET应该不受限制吧?
baiyangzdc 2008-12-09
  • 打赏
  • 举报
回复
IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。
baiyangzdc 2008-12-09
  • 打赏
  • 举报
回复
WSAAsyncSelect模型是Windows下最简单易用的一种Socket I/O模型。使用这种模型时,
Windows会把网络事件以消息的形势通知应用程序
路人乙2019 2008-12-09
  • 打赏
  • 举报
回复
IOCP加重叠IO模型是伸缩性最好地,可用来写高性能可伸缩性服务器。如apache服务器,游戏服务器。
caitian6 2008-12-09
  • 打赏
  • 举报
回复
,WSAAsyncSelect是基于窗口的, 效率一样不高, 客户端使用还行,服务器端就算了。
caitian6 2008-12-09
  • 打赏
  • 举报
回复
select 是微软为了适应UNIX下的 select 模型 用消息机制改的,效率不高。 适合小规模(64个SOCKET)。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧