(Предупреждение, что некоторые из этого кода будут похожи на онлайн-уроки)Java Sockets - одновременное выполнение одного и того же клиента параллельно.
Я думаю, что я сделал это так, что мой сервер может обрабатывать несколько запросов одновременно, используя темы, но я не совсем уверен, , И вдобавок ко всему, я не знаю, как я на самом деле отправлю несколько запросов сразу.
Моя цель состоит в том, чтобы параллельно запускать мой клиентский код, чтобы увидеть, что произойдет, если несколько клиентов подключится к серверу одновременно.
код клиента (в отдельном пакете проекта):
Client clientSocket = new Client(9990,"localhost");
Socket socket = new Socket(clientSocket.host,clientSocket.portNumber);
clientSocket.performTask(socket);
(«performTask (гнездо)» отправляет данные на сервер для выполнения задачи)
кода сервера (отдельного пакета проекта от клиентского кода):
Server server = new Server(9990);
int clientNumber = 0;
ServerSocket socket = new ServerSocket(server.portNumber);
try {
while (true) {
new ServerHandler(socket.accept(),clientNumber).go();
clientNumber++;
}
}
finally {
socket.close();
}
}
ServerHandler класса (тот же пакет проектов как код сервера):
public class ServerHandler extends Thread {
private static Socket socket;
private static int clientNumber;
public ServerHandler(Socket socket, int clientNumber) {
ServerHandler.socket = socket;
ServerHandler.clientNumber = clientNumber;
}
public void go() {
while(true) {
try {
//do calculation, do server tasks, etc.
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Поэтому, когда клиент подключается к серверу, сервер реализует класс ServerHandler для выполнения необходимых вычислений: идея заключается в том, чтобы несколько клиентов могли подключать все одновременно.
Итак, мой вопрос состоит из двух частей:
(1) Установил я мои программы, чтобы обеспечить многопоточность, или я сделал ошибку где-то по пути? (например, кто-то сказал, что мне нужно использовать «Runnable» где-то использовать многопоточность, и я замечаю, у меня нет)
(2) После фиксации мой код, чтобы позволить многопоточности, как бы я на самом деле использовать его, чтобы я мог запускать свой клиентский код параллельно?
Спасибо за объяснения, Так способ генерировать несколько одновременных запросов от клиента состоит в том, чтобы иметь 2-й класс в проекте Client, а также аналогичный второму классу, который у меня есть в моем проекте сервера? – user83676
Вы можете это сделать, или вы можете сами реализовать класс клиента Runnable, а затем создать цикл в основном методе и сгенерировать новый объект Thread и передать ему экземпляр вашего клиента и запустить его. :) – Rishi
Что-то вроде 'new Thread (new YourClient()). Start()' :) – Rishi