日期:2014-05-20  浏览次数:20751 次

socket问题,这个问效果能够实现么,socke转移
A与B建立一个socket连接   C可不可以使用B的socket连接向A发数据 ABC各表示一台电脑

------解决方案--------------------
把socket抽象成link对象,再多加一个读和写的数据缓存(rbf,wbf),把socket读到的消息放到写rbf,把socket要写的消息写到写缓存wbf,link的读写通过操作rbf和wbf,C就可以发送消息叫服务端往B的rbf里写数据,好像B在向A发送消息一样。把link放在map中方便查找,如map<"A",linkA>
貌似可行
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

B、C可以共享一个socket客户端连接


怎么实现呢,想不明白,困惑了很久了,有个场景是这样的

在一个集群环境,一台服务器接受消息,然后使用集群的主机处理,哪台服务器处理消息就把结果发给客户端

我有点审题不清了。
C远程调用B提供的方法行不行?

他的意思是使用集群做负载均衡,然后真正做处理的服务器直接将消息传回调用者,思路有问题
------解决方案--------------------
引用:
这种情形的解决方法应该是:
你在接收消息的服务器上应该有配置文件列出集群中的各个主机以及相对应的IP地址
集群中的每台主机都会建立一个ServerSocket监听一个特定端口
当接收消息的服务器确定了与哪台集群中的主机建立链接后,通过配置文件找到这台主机相应的IP,使用Socket建立链接
这样便完成了与集群中服务器的通讯

从上面可以看出来,实际上接受消息的服务器是Socket Client,而集群中的服务器是Socket Server

至于你的思路,是有问题的,先不说集群中的主机能不能共享Socket,socket是需要指定IP的,当然你可以使用广播来向集群广播信息,但是这样的业务逻辑就复杂了许多

我又看了一下,明白你的意思了,
你的意思是不是:客户端向服务器A传送一个处理请求,服务器A将请求发送给集群中的一台服务器B,服务器B处理完成后将结果直接回传给客户端。
如果这样的话,服务器A还有什么用处。。。难道只是负责决定使用集群中的那一台服务器做处理?
实际上,服务器A所做的类似于代理,将集群与用户之间屏蔽,客户只需知道服务器A,至于服务器A是自己处理请求还是交给集群,客户无需过问。
所以说我认为集群的结果应该回传给服务器A,然后再由服务器A将结果回传给客户,这样他们之间交流的只是数据,而不用去考虑你说的那种Socket公用问题。
------解决方案--------------------
Hi,
楼主的问题提的很有意思。我想了一下,我觉得这里面有些东西大家没有说清楚。
我寻思了一下也查了一些资料,在这里与大家一起讨论。
1.Socket是套接字(协议,IP,端口),想要通信的机器都应该有一个套接字。
2.常用的Socket通信是分为两种,一种是TCP,一种是UDP。(Socket编程内容)
3.TCP为两端有连接通信,协议保证双方发包接受包的顺序和可达性。(有连接方式,两端连接)
4.UDP为两端无连接通信,协议尽力发送数据包,不保证顺序和可达性。(无连接方式)

这两种方式,发送方一定要知道对方的IP和端口。按照楼主所说的AB相连。如果C要发给A,那么C的目的IP地址必须填写A的地址,然后在A转发到AB通道中发给B。所以这样的复用是可行的。但是必须在A机器中实现通道连接。

简单的实现例子。
1.启动A->B两端连接,进程1
2.启动C->A两端连接,进程2
3.当A收到C的数据,进程2交付数据给进程1,并转发。
(可以把1,2放在同一个进程中,交互可以更简单)

我想只能靠转发的方式实现楼主的需求。如果想C直接输入B的IP,经过A->B的流来发送数据,应该是不行的。