首先,我一直是从事C++编程工作,最近发现JAVA写一些网络相关的程序时工作效率特别高.所以想做一个JAVA方面的服务器.其中客户端有长连接,也有短连接向服务器请求数据. 客户端同时可能会有多个.以前我的C++的服务器设计方式是:
1.事先分配一个线程池,用于处理客户端请求;
2.一个线程专门用户的新连接加入到一个Socket链表,同时将断一的删除;
3.一个线程将各个客户端的数据加到数据请求链表;并同时将链表最后的数据让空闲的线程去处理.问题一. 不知道改成用JAVA来写是不是不用这么复杂的做了, 大家有什么好的设计方法? 这里要注意的是,有很多长连接也会连接到系统,如果一个SOCKET就开一个线程处理的话,SERVER端会有非常多的线程在运行. 而且经常线程创建关闭,是不是系统的效率也会变低?
问题二.如果用我上面的方式来做的法,客户端有新数据来的话有中断吗?(C++有),如果都要用查询方式的话,系统的效率和实时响应能力都会受到影响? 有什么好办法吗?
1.事先分配一个线程池,用于处理客户端请求;
2.一个线程专门用户的新连接加入到一个Socket链表,同时将断一的删除;
3.一个线程将各个客户端的数据加到数据请求链表;并同时将链表最后的数据让空闲的线程去处理.问题一. 不知道改成用JAVA来写是不是不用这么复杂的做了, 大家有什么好的设计方法? 这里要注意的是,有很多长连接也会连接到系统,如果一个SOCKET就开一个线程处理的话,SERVER端会有非常多的线程在运行. 而且经常线程创建关闭,是不是系统的效率也会变低?
问题二.如果用我上面的方式来做的法,客户端有新数据来的话有中断吗?(C++有),如果都要用查询方式的话,系统的效率和实时响应能力都会受到影响? 有什么好办法吗?
->这里要注意的是,有很多长连接也会连接到系统,如果一个SOCKET就开一个线程处理的话,SERVER端会有非常多的线程在运行. 而且经常线程创建关闭,是不是系统的效率也会变低?确实是有问题,所以还是应该使用线程池
查看其中的Web Servers、Web Services
public SocketTools(Socket pm_oSocket)
{
clientSocket = pm_oSocket;
}
/*
* @向Socket服务端发送报文
* @Param pm_sMsg 报文信息
*/
public void sendSocketMsg(String pm_sMsg)
{
try
{
PrintStream ous = new PrintStream(clientSocket.getOutputStream());
ous.println(pm_sMsg);
}
catch (IOException e)
{
System.out.println("Client:Socket发送报文错误");
}
}
/*
* 接收Socket服务端报文
* return returnMsg
*/
public String getServerMsg()
{
try
{
BufferedReader ins = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
return ins.readLine();
}
catch (IOException e)
{
System.out.println("Client:Socket接收报文错误!");
e.printStackTrace();
return null;
}
}
我写过一个很烂的 socket
http://my.6cncn.cn希望共同学习!看看原代码吧
[email protected]