[英]JAVA Wrapping Socket as a Singleton class in a multiscreen Swing app
我正在用Java swing編寫一個聊天應用程序,該應用程序具有自定義協議和使用套接字的服務器后端。 我正在制作ClientSide連接處理程序。 到目前為止,這是我的代碼:
package Client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import Common.Message;
public class ConnectionHandler {
Socket socket;
DataInputStream input;
DataOutputStream output;
public ConnectionHandler() throws UnknownHostException, IOException {
socket = new Socket(Client.HOST_INET,Client.PORT);
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());
}
public void sendMessage(Message message) throws IOException {
output.writeUTF(Message.disasseble(message));
}
public Message getMessage() throws IOException {
String message;
message = input.readUTF();
return Message.assemble(message);
}
public void closeConnection() {
}
private void reconect(){
}
}
該應用程序由一個CardLauut組成,該CardLauut包含登錄,注冊和聊天JPanels。 每個JPanel需要連接,並且只要應用程序正常運行,就應保持連接。 登錄屏幕發送與注冊相同的登錄消息/答案,當然還有聊天屏幕。
問題我應該對connectionHanler使用單例設計模式嗎? 如果裁判位於諸如帶有que的連接線程之類的單獨線程上,裁判也會起作用嗎? (我知道我需要不時對服務器進行ping操作,否則連接可能會丟失,因此我需要重新檢查並讓UI知道)
出於以下原因,保持ConnectionHandler
單例是有意義的:
ConnectionHandler
實例內部集中管理連接狀態。 例如,如果用戶未登錄,請不要發送聊天消息。 將連接保持為單一狀態還具有另一個優點:您很可能希望在專用線程中運行所有網絡通信。 單身人士可以極大地幫助那里。
同樣,所有與連接相關的屬性(已登錄?,傳輸加密等)都可以在“每個連接”的基礎上進行處理。
應事先考慮處理帶外通信(“ Socket繁忙時注銷”或通知)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.