Initial commit of secondary development sample code
This commit is contained in:
59
心跳保活/UdpServer.java
Normal file
59
心跳保活/UdpServer.java
Normal file
@ -0,0 +1,59 @@
|
||||
package com.github.paicoding.forum.web.front.test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.DatagramPacket;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
|
||||
/**
|
||||
* UDP 服务器
|
||||
* 本类使用单线程的线程池实现一个简单的UDP服务器,用于接收客户端发送的心跳信息。
|
||||
* 实现方法多种多样,需要根据具体的业务场景进行选择。
|
||||
*/
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class UdpServer {
|
||||
|
||||
|
||||
private static final int PORT = 10002;
|
||||
private volatile boolean isRunning = true; // 标志变量
|
||||
private final ExecutorService executor = Executors.newSingleThreadExecutor();
|
||||
|
||||
@PostConstruct
|
||||
public void startServer() {
|
||||
executor.submit(this::listenUdpPackets);
|
||||
}
|
||||
|
||||
@PreDestroy
|
||||
public void stopServer() {
|
||||
isRunning = false;
|
||||
executor.shutdown();
|
||||
log.info("UDP服务器已停止");
|
||||
}
|
||||
|
||||
|
||||
private void listenUdpPackets() {
|
||||
try (DatagramSocket socket = new DatagramSocket(PORT)) {
|
||||
log.info("UDP Server started on port {}", PORT);
|
||||
byte[] buffer = new byte[102400];
|
||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
||||
while (isRunning) {
|
||||
socket.receive(packet);
|
||||
String message = new String(packet.getData(), 0, packet.getLength()).trim();
|
||||
log.info("❤️ Heartbeat from: {} ", packet.getAddress());
|
||||
log.info("📦 Data received: {}", message);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("UDP Server error: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
38
心跳保活/server.py
Normal file
38
心跳保活/server.py
Normal file
@ -0,0 +1,38 @@
|
||||
import json
|
||||
import socket
|
||||
import traceback
|
||||
|
||||
|
||||
class UdpServer:
|
||||
def __init__(self):
|
||||
self.host = '0.0.0.0'
|
||||
self.port = 10002
|
||||
self.socket_server = self.__init()
|
||||
|
||||
def __init(self):
|
||||
socket_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
try:
|
||||
socket_server.bind((self.host, self.port))
|
||||
except:
|
||||
print(traceback.format_exc())
|
||||
finally:
|
||||
return socket_server
|
||||
|
||||
def recv(self, buff_size=102400):
|
||||
while True:
|
||||
try:
|
||||
data, addr = self.socket_server.recvfrom(buff_size)
|
||||
data = json.loads(data.decode('utf-8'))
|
||||
print('Received message: {}, from: {}'.format(data, addr))
|
||||
except:
|
||||
print(traceback.format_exc())
|
||||
|
||||
|
||||
def main():
|
||||
udp_server = UdpServer()
|
||||
udp_server.recv()
|
||||
return True
|
||||
|
||||
|
||||
if '__main__' == __name__:
|
||||
main()
|
||||
Reference in New Issue
Block a user