我正在使用 Apache HttpClient 库,并且正在尝试打开持久的 http 连接。有一些示例可以让我打开连接,但是我找不到任何使用某种循环来不断检查我是否从服务器接收到数据的示例。我们使用本地服务器,每次发生特定事件时通过永久连接发送消息。我不能定期发送 GET 请求,因为这会打开新的连接。
我的初始化函数:
public void initHTTP(String username, String password)
{
this.username = username;
this.password = password;
connectionManager = new BasicHttpClientConnectionManager();
BasicCredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(new AuthScope("192.168.0.241", 80), new UsernamePasswordCredentials(username, password.toCharArray()));
httpClient = HttpClientBuilder.create()
.setDefaultCredentialsProvider(provider)
.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE)
.build();
receiveThread.start();
}
我的 GET 请求功能:
public void doGETRequest(final String url)
{
Runnable run = new Runnable() {
@Override
public void run() {
try
{
HttpGet request = new HttpGet(url);
HttpClientResponseHandler responseHandler = new HttpClientResponseHandler() {
@Override
public Object handleResponse(ClassicHttpResponse response) throws HttpException, IOException {
//Log.d("DEBUG", "CODE: " + response.getCode());
if(response.getCode() == 200)
{
char[] out = new char[10000];
connectionMade = true;
HttpEntity entity = response.getEntity();
InputStreamReader reader = new InputStreamReader(entity.getContent());
BufferedReader bufferedReader = new BufferedReader(reader);
bufferedReader.read(out, 0, 10000);
bufferedReader.close();
Log.d("DEBUG", "RESPONSE: " + new String(out));
}
else if(response.getCode() == 401)
{
//Do nothing yet
}
return null;
}
};
httpClient.execute(request, responseHandler);
}
catch (IOException e)
{
Log.d("DEBUG", "IOException: " + e.getMessage());
}
}
};
Thread thread = new Thread(run);
thread.start();
}
我正在寻找一些方法来不断检查新消息。
谢谢你