[英]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.