Java包裹插座是多屏秋千应用中的单身班



我正在Java Swing中编写一个聊天应用程序,该应用程序具有使用套接字的自定义协议和服务器后端。我正在制作客户连接处理程序。这是我到目前为止的代码:

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(){
    }
}

该应用程序由持有登录,注册和聊天jpanels的Cardlauut组成。每个JPanel都需要连接,只要应用程序运行,应保持连接。登录屏幕发送登录消息/在注册和聊天屏幕上相同的答案。

问题我应该为Connectionhanler使用单身设计模式吗?如果引用在单独的线程上,例如带有que的连接线程(例如连接线程),它还可以工作吗?(我知道我需要时不时地丢失服务器,或者可能会丢失连接,以便我需要审核并让UI知道)

出于以下原因保持ConnectionHandler单例很有意义:

  • 您可以在ConnectionHandler实例中集中管理连接状态。例如,如果用户未登录,请勿发送聊天消息。
  • 允许按顺序发送消息。如果您不使用Singleton模式,从理论上讲,可以在多线程应用程序中退出订单。
  • 减少服务器上的负载,因为它每个客户端只有一个插座连接。

将连接保持在单顿中有一个其他优势:您很可能希望在专用线程中运行所有网络通信。单身人士可以在那里大大帮助。

也可以在"每个连接"基础上处理所有相关的与连接相关的属性(登录?,运输加密,...)。

应事先考虑处理带外通信(插座忙时登录或通知)。

相关内容

最新更新