[問題] ServerSocket 接收瀏覽器連線
先針對上面我問的問題做一個小結 (#1Fx9G3PQ)
這幾篇主題雖然是問 wait 和 notify 可不可以做到
某件事,經過我實際測試之後是OK 沒問題(那表示當初想法沒錯XD)
問題是出在連線,也就是 ServerSocket
-------------------
[底下有 demo 的原始碼]
先敘述一下我的 Server:
while(true){
socket=serverSocket.accept();
ClientHandler client=new ClientHandler(socket);
client.start();
}
// ClientHandler 是自己寫的 extends Thread class.
Client 的部分則是直接使用瀏覽器(chrome,firefox...)
我在 ClientHandler 的 run 裡面用了 wait(); 來暫停 :
public void run(){
// blablabla
synchronized(this){wait();}
//blablabla
}
理論上不影響主執行緒對吧?(serverSocket 的部分)
而當某見實情發生的時候,我會對所有的 client thread 進行 notify
這個部分也沒有問題(實測過了)
現在測試的情況有底下三種:
1. 一台電腦 用瀏覽器開兩個連線 連到這個 Server (不論瀏覽器是否相同都一樣)
都要等到第一個 client thread 結束後第二個才會被 serverSocket accept
2. 一台電腦 用 Java 的 URL openConnection , 連到 server
不論開幾條連線,都能順利的被 server accept,並且進入他們各自的
client thread 而且 wait();
3. 兩台電腦 各用瀏覽器開一條連線 到 Server
兩個連線都順利的被 accept , 並進入自己的 thread wait.
就我所認知的,第一個情況很奇怪... 有沒有人遇過
或者是知道這有可能是甚麼原因嗎?
任何只要是透過瀏覽器的,同一台電腦都只有第一個連線會被 accept..
我把我的 class 簡化,做成 demo 版 (只有 source code , 請自行編譯XD)
http://www.mediafire.com/download.php?h8m0k14cvn5myyq
啟動 server 之後五秒內 用同一台電腦瀏覽器連兩次 http://localhost:8888/
以及用不同電腦各連一次 (五秒內)
觀察 console 出現的訊息。
接著可以把 sleep 時間調長,以及同電腦不同瀏覽器連,結果也一樣。
裡面有附兩張圖,分別是我用
同電腦 Chrome , Firefox 五秒內各連一次
以及 電腦連一次,手機連一次(五秒內)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.39.75
推
06/29 18:30, , 1F
06/29 18:30, 1F
→
06/29 20:06, , 2F
06/29 20:06, 2F
→
06/30 01:15, , 3F
06/30 01:15, 3F
※ 編輯: darkk6 來自: 118.171.117.163 (06/30 02:13)
→
06/30 02:13, , 4F
06/30 02:13, 4F