之前使用httpserver方式发布地址关联服务,发现每秒只能处理1800条地址,远远没有达到本地计算每秒1万条的速度,于是改变思路,使用socket发布服务。
这是客户端代码
直接上代码
package org.socket;
import org.address.AddressTool;
import org.address.entity.StandardAddress;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class AddressSocket {
AddressTool ss = new AddressTool();
public AddressSocket() throws Exception {
ss.loadFromJson("D:\\","address4.json");
}
/**
* 服务端程序
*/
public void server() throws IOException {
// 服务端监听 9528 端口
ServerSocket serverSocket = new ServerSocket(9966);
System.out.println("等待连接");
Socket client = serverSocket.accept();
System.out.println("连接成功!");
while (true) {
try {
// 获取客户端输入流
InputStream inputStream = client.getInputStream();
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
String addr = new String(bytes, 0, read, Charset.defaultCharset());
// 客户端发来的消息
// System.out.println("客户端:" + addr);
StandardAddress address = ss.getStdAddress(addr);
// 给客户端发端东西
client.getOutputStream().write(address.toString().getBytes(StandardCharsets.UTF_8));
}catch (Exception e){
// System.out.println("无客户端链接!!!");
client.close();
client = serverSocket.accept();
}
}
}
class Task implements Runnable {
private ServerSocket serverSocket;
/**
* 构造函数
*/
public Task(ServerSocket socket) {
this.serverSocket = socket;
}
@Override
public void run() {
try {
handlerSocket();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private String handlerSocket(){
return "";
}
public static void main(String[] args) throws Exception {
AddressSocket tcpSocketServer = new AddressSocket();
tcpSocketServer.server();;
}
}
结合上一篇socketserver案例,可以发布一个完整的服务了