客户1→服务器→客房2之间信息传递(三层)(300分)

  • 主题发起人 主题发起人 zbsfg
  • 开始时间 开始时间
Z

zbsfg

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个三层无状态的系统,假如有1000个用户,其中A客户将处理的信息传给服务器会要求
服务器将信息传给B用户,那服务器如何做呢?系统有采用MIDAS+SOCKET的三层结构
由于客户较多,在所有客户搜索太慢,能不能直接指定?
 
能不能把传输的数据统一放到一个表中,对要传送的数据进行一定的定义,
包括被传送对象,这样,所有的客户端都可以在此表中找到发送方发给自己
的信息.
 
我要求服务器一接到客户A他指定的X(事先不知)客户,由服务器主动提交,而不是每个用
户在一个时间段自动向服务器要。
 
在程序中记录所有的登录用户的用户名以及ip地址,然后
收到信息时,查找是否有此登录用户名,如果有就根据用户
的IP地址向对方发送信息就行了.
 
up讲的可以呀,存一个computer表,通过此表向客户端发信息,如果你用的是三层结构,可以
将程序写在appserver上,我做过类似的程序
 
怎么实现客户定位
 
kevin8093:
你是怎么实现的?
/////////////////////////////////////////////////////////////
再加入ServerSocket(Server端),ClientSocket(Client端),当服务端AfterUpdateData中
写入:
for i:=0 to Client_Number-1do
begin
ServerSocket.Socket.Connections.SendText('Client Refresh');
end;
在Client端中的ClientSocket的OnRead事件中:
var str:string;
begin
str:=Socket.ReceiveText;
if str='Client Refresh' then
begin
ClientDataSet.Close;
ClientDataSet.CommandText:='select * from table';
ClientDataSet.Open;
end;
end;
/////////////////////////////////////////
如果这样一来要发布给所有用户,速度太慢,我想只对某一个(或几个)用户发布信息。
 
譬如:
张三将处理结果要马上传给李四、王五(系统要求必须由服务器作为中介),那么服务器如何
在众多客户马上找到李四、王五,并马上将张三传过来的信息定向传出呢?
 
procedure TForm1.Button1Click(Sender: TObject);
var
ID:Integer;
Socket:TCustomWinSocket;
temp:tfilestream;
begin
if combobox1.Text='' then
exit;
ID:=strtoint(combobox1.text);
//Create a socket with exist socket handle
Socket:=TCustomWinSocket.Create(ID);
if opendialog1.Execute then
begin
temp:=tfilestream.create(opendialog1.FileName,fmopenread);
Socket.SendBuf(temp,temp.size);
temp.free;
end;
socket.free;
end;

procedure TForm1.ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
combobox1.Items.Add(Inttostr(Socket.SocketHandle));
end;
这就是指定发的例子,自己看看吧!
 
如果客户端的CLIENTSOCKET没有OPEN,客户端收得到吗?CLIENTSOCKET能否自动OPEN?
 
>>如果客户端的CLIENTSOCKET没有OPEN,客户端收得到吗?
没有open,怎么收东西?
>>CLIENTSOCKET能否自动OPEN?
它怎么知道什么时间该Open呢?
我觉得每个客户端程序一启动,就生成一个线程等待结束数据(用ServerSocket),接收
到数据后进行分析处理。
服务器端也使用ServerSocket接收客户端的数据,接到之后分析处理,对指定站从数据库表
中找到要发送站点的IP地址,通过一个ClientSocket进行发送。
其实分析好,流程并不是很复杂。
就是每个终端都有ServerSocket接收数据(我推荐开线程,后台处理),用ClientSocket
发送数据。
 
直接CallBack客户就可以了。。。
^^^^^^^^
你看看以前的帖子吧。。
 
多人接受答案了。
 
后退
顶部