Springboot服务之间使用socket通信
关于websocket的知识欢迎点击:[WebSocket_百度百科]
写在前面
网页与后端服务之间的socket可能大家使用非常广泛,类似于大屏页面状态的实时更新,聊天推送消息等等…这篇博客主要写后端与后端之间的sokcet通信实现,后端基于springboot项目,感兴趣的可以往下看。
引入依赖
这里直接引入sping自带的websocket依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
</dependency>
编写服务端代码
服务端,既项目启动,便开始提供服务的socket监听类。并对所有客户端向此IP端口推送的消息进行解析,而后使用。代码如下:
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
/**
* @Author: SongTiankai
* @Description: socker 监听类
* @Date: 2022/12/17 19:10
* @Version: 1.0
*/
@Component
public class MySokcetListrener implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
final String QUIT = "quit";
final int port = 8888;
ServerSocket serverSocket = null;
BufferedReader reader = null;
BufferedWriter writer = null;
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket socket = serverSocket.accept();
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String msg = null;
while ((msg = reader.readLine()) != null) {
//可传递json字符串,在对象中用type进行区分发来的消息类型
System.out.println(msg);
}
}
} catch (SocketException e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
reader.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
客户端代码
客户端代码比较简单,创建一个socket使用即可,代码如下:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
/**
* @Author: SongTiankai
* @Description:
* @Date: 2022/12/17 19:27
* @Version: 1.0
*/
public class MySocketClient {
public static boolean sendMessage(String msg){
Socket socket = null;
OutputStream outputStream = null;
try {
socket = new Socket("127.0.0.1",8888);
outputStream = socket.getOutputStream();
outputStream.write(msg.getBytes(StandardCharsets.UTF_8));
return true;
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (outputStream != null) {
outputStream.close();
}
if (socket != null) {
socket.close();
}
}catch (IOException e) {
}
}
return false;
}
}
测试
启动两个springboot服务,客户端通过接口向服务端推送消息。
网页请求返回数据,true表示推送成功
查看服务端数据接收,打印Hello,World!
功能实现。