请教:几个关于SOCKET编程的问题

white 2000-07-24 10:43:00
问题一:防火墙后的通信问题。在一个点对点通信的软件中,到底
如何处理防火墙问题较好呢?大家知道,ICQ由于在这上面仅仅支持
SOCKET4和SOCKET5代理服务器,而不能在中国的169网中使用,从
而失去了一大批用户,而OICQ则很好地解决了这个问题,有谁知道
OICQ的做法,或者有更好的做法呢?

问题二:服务器的效率问题。实现SOCKET的服务器端有很多种做法
比如只用一个SOCKET,处理完一个请求再处理下一个请求,或者
每接到一个请求就新开一个SOCKET,用新开的SOCKET去完成任务,
而旧的SOCKET继续侦听新的连接请求,但要求使用非阻塞式。
还有有新请求就开一个新线程,用新线程去处理任务,原来的主线
程继续侦听,使用阻塞式SOCKET。第一种方法
当然不可能用了,那么第二种和第三种,哪种效率更高呢?
第二种中需要维护一个SOCKET列表,数据到达时还需要判断是哪
个SOCKET的数据,而使用多线程后,虽然编程上简化了,但是系统
需要额外的线程切换开销。在超大容量连接请求时,到底孰优孰劣,
还请各位专家指点。
...全文
244 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Redspider 2000-08-20
  • 打赏
  • 举报
回复
OICQ应该是通过在163、169同时设置服务器、或者服务器同时连接163和169网实现的。

对于套接字编程方式,首先应当看你是什么用途,TCP一般是用做点对点,因为每个SOCKET都只能
和一个远端对应,比较耗费资源。OICQ是用UDP来收发消息的。
Kevin_qing 2000-08-18
  • 打赏
  • 举报
回复
OICQ的客户端间的交互可以穿越防火墙,它是用数据报方式,而不是基于连接的。
具我观察,oicq客户再本机的4000端口侦停时,防火墙所在的服务器上会对外开一端口進行
侦听,所以外面的消息可以近入。但是怎么做到的,我就不清楚了
kingwill 2000-08-18
  • 打赏
  • 举报
回复
因为OICQ客户端和服务端是面向连接的TCP。由客户登陆服务器,这样,防火墙就解决了。
OICQ上做的是几个线程在连接的SOCKET里论询。
Kevin_qing 2000-08-17
  • 打赏
  • 举报
回复
强烈关注
shshsh_0510 2000-07-27
  • 打赏
  • 举报
回复
看你的服务器有几个cpu了
kingwill 2000-07-25
  • 打赏
  • 举报
回复
强烈关注
moyixin 2000-07-24
  • 打赏
  • 举报
回复
问题一:我很少用icq,不过我猜想oicq可能利用现存在的http proxy,就象http tunnel一样。另外,应是socks4,socks5,不是socket4,socket5.
问题二:这的根据你的服务类型来判断,不是绝对的高与底的问题。如果服务是短请求,第二种方式比较合适。长请求第三种比较合适,但也不尽然。apache就是利用进程池的概念来限制进程的数量过多问题。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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