java - Java通过Socket高频发送短字符串
问题描述
我正在尝试制作一个应用程序来控制 DMX 通道。为此,我有一个 ESP8266,它将字符串作为输入,如“2.255”,其中第一个整数是 DMX 通道,第二个整数是值。
对于我的 PC,我编写了一个方法,该方法首先构建字符串,然后通过 Socket 将其发送到 ESP8266 的 IP 地址。
for(DMXChannel c : list){
if(lastvalue.get(c.getChannelID() - 1) != c.getValue()){
try {
String msg = c.getChannelID() + "." + c.getValue();;
DatagramSocket clientSocket = new DatagramSocket();
InetAddress ipaddr = InetAddress.getByName(ip); //IP Address is "192.168.4.1"
byte[] sendData = new byte[1024];
sendData = msg.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipaddr, 8888);
clientSocket.send(sendPacket);
clientSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这很好用,但是当我尝试淡化时我遇到了问题。这段代码的频率似乎太慢了。
有没有人有“更快”的解决方案?
解决方案
您可以执行以下操作来加快代码速度:
不要调用
getByName
IP 地址。这涉及 DNS,但 IP 地址不需要 DNS。而是调用getByAddress
. 如果您确实需要调用 getByName,只需调用一次并缓存答案。不要每次都打开、关闭、重新打开等套接字。保持打开状态。
推荐阅读
- c++ - C++ 错误:没有用于调用“toupper”的匹配函数
- django - Django API 抛出异常值:ParserError 类型的对象不是 JSON 可序列化的,没有进入 try 块
- django - 如何在django模板的html表中显示多个对象数据
- reactjs - material-ui如何覆盖嵌套样式
- xcode - 无法将 DoubleConversion 更新为 cocoapods 中的最新更新 (1.1.6)
- c# - 正则表达式只接受小数和数字,包括零点小数并限制 0
- sql-server - 如何在 SQL Server 中的每个拆分项上获取带引号的拆分字符串?
- matlab - “double”类型的输入参数的未定义函数“imgaussfilt”
- javascript - 使用 Ramda 或 vanillaJS 将任意深度嵌套的值转换为对象键
- android - 部分用户从 google play store 安装后无法打开我的应用程序,如何检查原因?