springboot websocket微信 WSS请求

idea+spring boot +jdk1.8

1:WebSocket创建

在web项目启动后,启动WebSocket

复制代码
@Component
public class ApplicationInit implements CommandLineRunner, ApplicationListener {
private static Log logger = LogFactory.getLog(ApplicationInit.class);

@Override
public void run(String... args) {
    System.out.println("------------------------ Spring初始化完毕 ------------------------");
    logger.error("---" + Arrays.toString(args) + "---");
    WsPool.startWebsocketInstantMsg();
}

}
复制代码
  2:启动webSocket的方法

复制代码
   /**
* 启动websocket
*/
public static void startWebsocketInstantMsg() {

    System.out.println("startWebsocketInstantMsg:System");
    InetSocketAddress inetSocketAddress = new InetSocketAddress(10000);  //端口号
    WebSocketImpl.DEBUG = false;
    MyWebScoket webScoket;
    webScoket = new MyWebScoket(inetSocketAddress);

    webScoket.start();
    System.out.println("----------websocket启动成功---------------");
    InetAddress address = inetSocketAddress.getAddress();
    String hostName = inetSocketAddress.getHostName();
    int port = inetSocketAddress.getPort();
    System.out.println("inetSocketAddress::address==" + address + "  hostName==" + hostName + "  port==" + port);
}

复制代码

因为wss是要经过证书的,就像https一样,所以要么请求附带证书,要么使用nginx代理(nginx需要已经配置证书)

3:配置nginx代理webSocket

复制代码
location /websocket{
index index.html index.htm;
proxy_pass http://localhost:10010;
include proxy.conf;        // 其他的通用的代理设置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;  // webSocket需要的独有的头部设置
proxy_set_header Connection “Upgrade”;
}
复制代码

加上:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “Upgrade”;
  (模拟WebSocket的头部请求信息)
4:请求
  http://域名/websocket  nginx自动将请求转发到 10000 端口

附:前端连接后端WebSocket触发的方法

复制代码
/**
*建立连接
*
* @param conn
* @param handshake
*/
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println(“onOpen::连接成功”);
// wss连接的时候触发的代码
String openId = handshake.getFieldValue(“openId”);  //此处可以获取前端传入的参数

    this.userJoin(openId, conn);
}

复制代码
复制代码
/**
* 关闭连接
*
* @param conn 关闭连接的用户
* @param code 密码
* @param reason 原因
* @param remote 返回远程主机是否启动了连接的关闭。
/
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
//断开连接时候触发代码
System.out.println(“onClose::断开连接”);
userLeave(conn);
System.out.println(reason);
}
复制代码
复制代码
/
*
* 接收到前端的消息
*
* @param conn 远程主机(用户)
* @param message 消息
*/
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println(“接收消息:” + message);
JSONObject jsonObject = JsonUtils.parseString(message);

}

复制代码
复制代码
// 出现异常
@Override
public void onError(WebSocket conn, Exception ex) {
//错误时候触发的代码
System.out.println(“on error”);
ex.printStackTrace();
}

原文转自https://www.cnblogs.com/draymond/p/12503120.html
参考一下,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值