如果一个单位用户需要频繁的访问多个服务器,则安装windows server2003时 最好选择()授权模式?
b,每客户
原因是每服务器偏向单种服务,多访问人,每客户偏向单客户多种服务,官方解释如下:
有两种授权模式:
每服务器:该许可证是为每一台服务器购买的许可证,许可证的数量由"同时"连接到服务器的用户的最大数量来决定;每服务器的许可证模式适合用于网络中拥有很多客户端,但在同一时间"同时"访问服务器的客户端数量不多时采用,并且每服务器的许可证模式也适用于网络中服务器的数量不多时采用在“每服务器”模式许可中,每个连接到特定服务器的并发连接都需要一个单独的客户端访问许可证。也就是说,这台服务器在任何时刻都只能支持固定数量的连接。例如,如果您选择具有
5 个许可证的每服务器客户端许可模式,那么这台服务器在任何时刻都只能拥有 5
个并发连接。使用这些连接的客户端不需要其他的许可证。如果组织的专用服务器只有一个用途,而大量不同的用户对其进行访问,那么它们通常偏好每服务器许可模式。例如,一台单独的专用
Extranet 服务器拥有 100 个授权访问该服务器的帐户,但是在任何时刻同时登录的用户都不超过 20 个;
每客户:该许可证模式是为网络中每一个客户端购买一个许可证,这样网络中的客户端就可以合法地访问网络中的任何一台服务器,而不需要考虑"同时"有多少客户端访问服务器;该许可证模式适用于企业中有多台服务器,并且客户端"同时"访问服务器的情况较多时采用在每设备或每用户模式中,每个访问或使用服务器的设备或用户都需要单独的客户端访问许可证。使用一个客户端访问许可证,特定的设备或用户可以连接到环境中任何数量的服务器。例如,如果您选择具有
5 个许可证的每设备或每用户模式,那么它将允许 5
个用户或设备访问任意数量的服务器,建立任意数量的并发连接。如果组织在环境中拥有承载多种服务的服务器,这就是它们最常用的许可模式。
只要配置你的TNSNAMESORA文件中的脚本即可。
C:\oracle\ora92\network\admin 这个目录下
比如
a1=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 19216821)(PORT = 1521))
)
(CONNECT_DATA =
(SID = a1)
)
)
b1=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =19216822)(PORT = 1521))
)
(CONNECT_DATA =
(SID = b1)
)
)
c1=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 19216823)(PORT = 1525))
)
(CONNECT_DATA =
(SID = c1)
)
)
参考上一个方法。
一个客户端,我可以简单的理解成一个进程。
一个进程可以很多个 SOCKET。
一个SOCKET 可以连接一个服务器,建立一个连接。
新手,建议就用CSocket吧, 针对每个服务器实例化一个对象。
至于SOCKET模型,不急,等基本的会了,再深入。
是这样的,多线程技术一般是应用在客户端-服务器的模型中,这个服务器是固定的,但是可以有多个客户端同时连接服务器(这里,多个客户端体现在IP或是源端口的不同),多线程就体现在服务器可以同时派发多个线程,去服务每个客户。你说的这种情况,用多线程来实现是可以的,只不过是同一个IP不同的源端口建立的socket而已,可以建立多个socket连接。
connect有个参数是struct sockaddr 所以可以用多个socket连接多个服务端。然后通过不同的socket给不同的服务器发送数据。还有你是不能直接操作服务器的。服务器只是根据你发送过去的特定数据进行响应。
一样的,弄个线程然后循环一直accept,判断:当有客户端链接的时候,就保存下来链接的这个客户端的socket,然后开个线程对这个socket发送数据就可以了。因为是循环accept就会有很多客户端链接过来。
服务器端可以采用多线程处理客户请求,例如:
package threadPool;
import javaioBufferedReader;
import javaioIOException;
import javaioInputStream;
import javaioInputStreamReader;
import javaioOutputStream;
import javaioPrintWriter;
import javanetServerSocket;
import javanetSocket;
import javautilconcurrentExecutorService;
import javautilconcurrentExecutors;
public class ThreadPoolServer {
private int port = 8000;
private ServerSocket serverSocket;
private ExecutorService executorService; //线程池
private final int POOL_SIZE = 4; //单个CPU时线程池中的工作线程数目
public ThreadPoolServer() throws IOException{
serverSocket = new ServerSocket(port);
//创建线程池
//Runtime 的availableProcessors()方法返回当前系统CPU的数目
//系统CPU越多,线程池中的工作线程数目越多
executorService = ExecutorsnewFixedThreadPool(RuntimegetRuntime()availableProcessors()POOL_SIZE);
Systemoutprintln("服务器已启动!!");
}
public void service(){
while(true){
Socket socket = null;
try{
socket = serverSocketaccept();
executorServiceexecute(new Handler(socket));
}catch(IOException e){
eprintStackTrace();
}
}
}
public static void main(String[] args) {
try {
new ThreadPoolServer()service();
} catch (IOException e) {
eprintStackTrace();
}
}
}
class Handler implements Runnable {
private Socket socket;
public Handler(Socket socket) {
thissocket = socket;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socketgetOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socketgetInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public String echo(String msg) {
return "echo:" + msg;
}
@Override
public void run() {
try {
Systemoutprintln("New connection accepted:" + socketgetInetAddress() + ":" + socketgetPort());
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null;
while ((msg = brreadLine()) != null) {
Systemoutprintln(msg);
pwprintln(echo(msg));
if (msgequals("bye")) {
break;
}
}
} catch (IOException e) {
eprintStackTrace();
} finally {
try {
if (socket != null)
socketclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
你可以在客户端控制,首先第一步向每个服务器发送请求,分别请求,比如A0-100,B101-200,C301-400等等,当其中一个下载完成之后再向这个服务器发送新的请求,比如B101-200下载完了,再向B请求401-500,同时检速度及失败,比如A在05秒内0-100的内容还没有返回,或者没有返回完,则全部丢弃,找一个下载完毕或者空闲的服务器发起相同请求,比如想下载完成的B服务器发起0-100的请求。数据全部下载完成后合成一个数据。
0条评论