Directorio de artículos
1. Configurar el servicio de socket local
Entorno de demostración del servidor Java
- jdk1.8
- Marco: springboot+maven
- Herramientas de desarrollo: IDEA
Introduzca las coordenadas maven del marco netty encapsulado por el tercer paquete en el archivo pom
<dependency>
<groupId>io.github.fzdwx</groupId>
<artifactId>sky-http-springboot-starter</artifactId>
<version>0.10.6</version>
</dependency>
Nota: El iniciador springbootweb debe comentarse en el archivo pom. El iniciador web inicia de manera predeterminada el servicio tomcat, lo que entrará en conflicto con el servicio netty.
Cree un servidor java y créelo en modo de interfaz, lo cual es conveniente para llamadas externas
@GetMapping("/getConnect")
public void getConnect(HttpServerRequest request){
request.upgradeToWebSocket(ws -> {
ws.mountOpen(h->{
ws.send("连接成功,开始聊天吧!");
});
ws.mountText(s -> {
System.out.println(s);
//对方回复
System.out.println("客户端回复: "+s);
//获取控制台输入的值
Scanner scanner =new Scanner(System.in);
String next = scanner.next();
ws.send(next);
});
});
}
Inicie el servicio, aparece la siguiente información para indicar que el inicio se realizó correctamente y el puerto expuesto predeterminado: 9999
2. El servicio de socket local está expuesto a la red pública
Para exponer los servicios locales a la red pública, podemos lograrlo a través de la penetración de la intranet cpolar, sin necesidad de una IP de red pública o un enrutador. Si no ha instalado cpolar, consulte la documentación del sitio web oficial - Guía de inicio
2.1 Crear un puerto de mapeo de túneles 9999
Una vez completada la instalación y configuración local de cpolar, visite el puerto local 9200 ( http://127.0.0.1:9200 ) en el navegador e inicie sesión en la interfaz de administración de la interfaz de usuario web de cpolar.
Haga clic en Gestión de túneles a la izquierda - Crear túnel:
- Nombre del túnel: se puede personalizar, tenga cuidado de no duplicar el nombre del túnel existente
- protocolo: tcp
- Dirección local: 9999
- Tipo de puerto: libre de elegir al azar
- Región: Seleccionar China VIP
hacer clic创建
Nota: El túnel selecciona una dirección TCP y un puerto temporales, que cambiarán dentro de las horas 24. Si necesita corregir la dirección TCP, puede actualizar a un paquete profesional para corregir la dirección TCP.
2.2 Obtener la dirección de la red pública
Una vez que el túnel se haya creado correctamente, haga clic en el estado de la lista de túneles en línea de la izquierda, puede ver el túnel recién creado y se ha generado la dirección de red pública correspondiente, cópielo.
3. Conéctese al servidor de socket local a través de la red pública
En este punto, el servidor websocket ha sido expuesto desde el localhost local a la red pública, y luego creamos un cliente para probar la red pública para acceder a la conexión del servidor socket.
Tome el cliente de socket basado en go como ejemplo, conecte el servidor de socket java a través de la red pública
- ir versión: 1.19
- Herramientas de desarrollo: VSCODE
Descargue el marco websocket a través de git
go get github.com/gorilla/websocket
Cree un cliente GO, tenga en cuenta: ¡el valor del Host es la dirección de red pública del túnel copiado arriba!
package main
import (
"fmt"
"log"
"net/url"
"github.com/gorilla/websocket"
)
func main() {
// 定义服务端的地址
u := url.URL{
Scheme: "ws",
Host: "3.tcp.vip.cpolar.cn:10793", //地址为复制隧道的公网地址
Path: "/eth/getConnect"} //服务端controller 映射地址
// 与服务端建立连接
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
// 阻塞主线程
down := make(chan byte)
// 启动一个线程,读取从服务端发送过来的数据
go func() {
for {
_, message, _ := c.ReadMessage()
fmt.Println("服务端回复:" + string(message))
}
}()
//启动一个线程输入消息
go func() {
for {
var input string
fmt.Scanln(&input)
c.WriteMessage(websocket.TextMessage, []byte(input))
}
}()
for {
<-down
}
}
Luego inicie el servicio, conéctese al servidor y las palabras devueltas por el servidor indican que la conexión es exitosa
El cliente ingresa información en la consola y hace clic en Enter
El servidor recibe e imprime la información enviada por el cliente
Ingrese un mensaje en la consola del servidor y presione Entrar
El cliente recibe el mensaje de respuesta del servidor y la conexión es exitosa.