如何用node.js实现客户端向服务器实时发送数据的功能

如何用node.js实现客户端向服务器实时发送数据的功能,第1张

如何用nodejs实现客户端向服务器实时发送数据的功能

在数据层面,主要有:

Index:Elasticsearch用来存储数据的逻辑区域,它类似于关系型数据库中的db概念。一个index可以在一个或者多个shard上面,同时一个shard也可能会有多个replicas。

Document:Elasticsearch里面存储的实体数据,类似于关系数据中一个table里面的一行数据。

document由多个field组成,不同的document里面同名的field一定具有相同的类型。document里面field可以重复出现,也就是一个field会有多个值,即multivalued。

Document type:为了查询需要,一个index可能会有多种document,也就是document type,但需要注意,不同document里面同名的field一定要是相同类型的。

Mapping:存储field的相关映射信息,不同document type会有不同的mapping。

我们定义发送者和接收者,发送者作为客户端,接收者作为服务端。

Senderjava

import javaioDataOutputStream;

import javaioIOException;

import javanetSocket;

import javautilArrays;

public class Sender {

public static void main(String[] args) throws Exception {

// 127001 代表本机地址,在 8888 端口上监听

Sender sender = new Sender("127001", 8888);

byte[] bytes = {15, 16, 17, 120}; // 对应的十六进制是 0F 10 11 78

sendersend(bytes);

Systemoutprintln("发送" + ArraystoString(bytes) + "完毕!");

}

private final String host;

private final int port;

public Sender(String host, int port) {

thishost = host;

thisport = port;

}

private void send(byte[] bytes) throws IOException {

Socket socket = new Socket(host, port); // 建立和服务端的 socket

try (DataOutputStream dos // 建立输出流

= new DataOutputStream(socketgetOutputStream())) {

doswrite(bytes, 0, byteslength); // 向输出流写入 bytes

}

}

}

Receiverjava

import javaioDataInputStream;

import javaioIOException;

import javanetServerSocket;

import javanetSocket;

public class Receiver {

public static void main(String[] args) throws Exception {

Receiver receiver = new Receiver(8888);

receiverreceive();

}

private final ServerSocket serverSocket;

public Receiver(int port) throws IOException {

serverSocket = new ServerSocket(port);

}

private void receive() throws IOException {

Systemoutprintln("等待客户端连接");

Socket socket = serverSocketaccept();

try (DataInputStream dis = new DataInputStream(socketgetInputStream())) {

byte[] bytes = new byte[1024]; // 假设发送的字节数不超过 1024 个

int size = disread(bytes); // size 是读取到的字节数

String hex = bytesToHex(bytes, 0, size);

Systemoutprintln("接收到的byte数组的十六进制:" + hex);

}

}

/

  将 byte 数组转化为十六进制字符串

 

  @param bytes byte[] 数组

  @param begin 起始位置

  @param end 结束位置

  @return byte 数组的十六进制字符串表示

 /

private String bytesToHex(byte[] bytes, int begin, int end) {

StringBuilder hexBuilder = new StringBuilder(2  (end - begin));

for (int i = begin; i < end; i++) {

hexBuilderappend(CharacterforDigit((bytes[i] & 0xF0) >> 4, 16)); // 转化高四位

hexBuilderappend(CharacterforDigit((bytes[i] & 0x0F), 16)); // 转化低四位

hexBuilderappend(' '); // 加一个空格将每个字节分隔开

}

return hexBuildertoString()toUpperCase();

}

}

运行,首先启动服务端:

然后启动客户端:

查看接收结果:

可使用android自带的httpclient框架实现。

1 GET 方式传递参数

//先将参数放入List,再对参数进行URL编码

List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();

paramsadd(new BasicNameValuePair("param1", "数据")); //增加参数1

paramsadd(new BasicNameValuePair("param2", "value2"));//增加参数2

String param = URLEncodedUtilsformat(params, "UTF-8");//对参数编码

String baseUrl = "服务器接口完整URL";

HttpGet getMethod = new HttpGet(baseUrl + "" + param);//将URL与参数拼接

HttpClient httpClient = new DefaultHttpClient();

try {

HttpResponse response = httpClientexecute(getMethod); //发起GET请求

Logi(TAG, "resCode = " + responsegetStatusLine()getStatusCode()); //获取响应码

Logi(TAG, "result = " + EntityUtilstoString(responsegetEntity(), "utf-8"));//获取服务器响应内容

} catch (ClientProtocolException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

2 POST方式 方式传递参数

//和GET方式一样,先将参数放入List

params = new LinkedList<BasicNameValuePair>();

paramsadd(new BasicNameValuePair("param1", "Post方法"));//增加参数1

paramsadd(new BasicNameValuePair("param2", "第二个参数"));//增加参数2

try {

HttpPost postMethod = new HttpPost(baseUrl);//创建一个post请求

postMethodsetEntity(new UrlEncodedFormEntity(params, "utf-8")); //将参数填入POST Entity中

HttpResponse response = httpClientexecute(postMethod); //执行POST方法

Logi(TAG, "resCode = " + responsegetStatusLine()getStatusCode()); //获取响应码

Logi(TAG, "result = " + EntityUtilstoString(responsegetEntity(), "utf-8")); //获取响应内容

} catch (UnsupportedEncodingException e) {

eprintStackTrace();

} catch (ClientProtocolException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何用node.js实现客户端向服务器实时发送数据的功能

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情