精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>网络与通讯>>[转载] SOCKET, CGI, CORBA, RMI, DCOM -

主题:[转载] SOCKET, CGI, CORBA, RMI, DCOM -
发信人: crazyjava()
整理人: (1999-11-10 08:56:56), 站内信件
【 以下文字转载自 SystemAnalysis 讨论区 】
【 原文由 骄傲的中国人 所发表 】
SOCKETS

While flexible, using sockets to communicate between client 
and server can be cumbersome because of all the details you 
have to handle by yourself. 

To create a simple client-side connection using sockets, you 
must do the following:
1) Locate the remote server and open a socket connection to it.
2) Marshal the parameters to be transmitted, including a value
   that identifies the service you're requesting.
3) Transmit the parameters.
4) Listen for, and receive, the response from the server.
5) Decode the response from the server, unmarshaling its 
   components if necessary.

The most complex part of all this is sending and receiving 
parameters. If the parameters you're sending to the server, 
and the value it returns, are primitive (that is, non-object) 
values, the process is fairly straightforward. If, however, 
you want to send an object as a parameter, or receive one 
as a return value, things get more exciting. To send objects 
via a socket connection, you must first extract each of the 
object's attributes, then marshal and transmit them. Of course, 
if any attribute of your object is itself an object, you must 
apply this technique recursively --- only primitive values 
can be sent across the socket stream.

Implementing the server-side of this connection is no easier 
than implementing a client. The server object must unmarshal 
any parameters it receives, decode the value telling it what 
service to perform, and so on.

All of this marshaling and unmarshaling might lead you to wish
that Java included an RPC facility, which would at least help 
you pack and unpack your arguments. Rather than just RPC, 
however, Java provides that RMI facility, which goes RPC one 
better. For right now you might wonder why you might choose 
to use sockets to communicate with remote objects when RMI 
is available? Here are two possible reasons:
1) To commnicate with non-Java objects and programs: Not all 
   software on networks is written in Java --- at least, 
   not yet. Until it is, form time to time you will need 
   to interface a Java program with a non-Java program. 
   Sockets are a good way to do this, because data transmitted 
   over a socket is reduced to its lowest common denominator: 
   a stream of bytes. A program written in almost any language, 
   running on almost any platform, can deal with a stream 
   of bytes.
2) To communicate as efficiently as possible: The convenience 
   of RPC, RMI, and other facilities extracts a price in the 
   form of processing overhead. A well-designed socket 
   interface between programs can outperform on based on such 
   higher-level facilities. If your server must handle large 
   volumes of requests, this may be important to you. 

As usual, deciding whether to use socket, RMI, CORBA, or some 
other facility involves a design tradeoff. A program written 
using sockets is larger and more complex than one written 
using RMI, yet may perform better. This choice is analogous 
to the choice of programming languages: a program written in 
assembly language can, in principle, outpreform one written 
in C or Java. But an assembly program is much harder to write, 
is likely to contain more errors, and is more difficult to 
maintain than a program written in a high-level language.

/Crazyjava

--
孤身走我路...
其实,路,两个人一起走比一个人要好。
email: [email protected]

※ 修改:.crazyjava 于 Jul 30 17:06:35 修改本文.[FROM: 139.87.93.173]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 139.87.93.173]
--
※ 转载:.月光软件站 http://www.moon-soft.com.[FROM: 139.87.93.173]

[关闭][返回]