Аплетът отваря сокет към сървъра по време на инициализацията си, след което изпраща по сокета идентификатор на компания (в случая MSFT) и стартира отделна нишка, която да чете постоянно данните идващи от сокета и да ги добавя в текстовата област. Нужда от синхронизация не е необходима, защото текстовата област се променя само от една нишка и не може да стане конфликт.
Изглед от аплета за визуализация на акциите на борсата
Ето и примерен HTML код, с който може да се изпълни този аплет:
CODE1
2
3
4
5
6
| //TestStockQuoteApplet.html
<html><body><center>
<applet code="StockQuoteApplet.class" codebase="."
width="300" height="150">
</applet>
</center></body></html> |
Остава да предложим и примерна реализация на сървъра за следене на акциите на борсата. За леснота ще изпращаме на клиентите случайни данни с пълното съзнание, че са фалшиви. В реална ситуация данните биха могли да се извличат от някаква база данни или от друг сървър. Ето как би могъл да изглежда сорс-кодът:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
//StockQuoteServer.java
import java.io.*;
import java.net.*;
import java.util.*;
public class StockQuoteServer {
public static int PORT = 2004;
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
Socket socket = serverSocket.accept();
StockQuoteThread clientThread =
new StockQuoteThread(socket);
clientThread.start();
}
}
}
class StockQuoteThread extends Thread {
private Socket mSocket;
private BufferedReader mSocketReader;
private PrintWriter mSocketWriter;
private Random mRandomGenerator = new Random();
public StockQuoteThread(Socket aSocket) throws IOException {
mSocket = aSocket;
mSocketReader = new BufferedReader(
new InputStreamReader(mSocket.getInputStream()));
mSocketWriter = new PrintWriter(
new OutputStreamWriter(mSocket.getOutputStream()));
}
public void run() {
try {
String companyTicker = mSocketReader.readLine();
while (!isInterrupted()) {
String quote = companyTicker + ": " +
getDate() + " " + getRandomQuote();
mSocketWriter.println(quote);
mSocketWriter.flush();
int delay = mRandomGenerator.nextInt(3000);
Thread.sleep(delay);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private String getRandomQuote() {
int value = mRandomGenerator.nextInt(10000);
return " " + (value / 100) + "." + value % 100;
}
private String getDate() {
return (new Date()).toString();
}
} |
Текстът е подготвен от : Светлин Наков -
www.nakov.com