WebSocket聊天(后端)

idea+spring boot +jdk1.8

1:WebSocket创建

1.1: 在web项目启动后,启动WebSocket

@Component
public class ApplicationInit implements CommandLineRunner, ApplicationListener<ApplicationEvent> {
    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();
    }
}

1.1: 启动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 端口

5:附:前端连接后端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();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于实现 WebSocket 聊天室的后端,你可以使用一种编程语言和框架来处理 WebSocket 连接和消息传递。以下是一个使用 Python 和 Flask-SocketIO 框架的示例: 1. 首先,确保已经安装了 Python 和 Flask-SocketIO,可以使用以下命令安装 Flask-SocketIO: ``` pip install flask-socketio ``` 2. 创建一个名为 `app.py` 的文件,并导入必要的模块: ```python from flask import Flask, render_template from flask_socketio import SocketIO, emit ``` 3. 初始化 Flask 应用程序和 SocketIO: ```python app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key' socketio = SocketIO(app) ``` 4. 创建一个路由以渲染聊天室页面: ```python @app.route('/') def index(): return render_template('index.html') ``` 5. 使用 `@socketio.on` 装饰器定义事件处理程序来处理 WebSocket 连接和消息事件: ```python @socketio.on('connect') def handle_connect(): print('Client connected') @socketio.on('disconnect') def handle_disconnect(): print('Client disconnected') @socketio.on('message') def handle_message(data): emit('message', data, broadcast=True) # 将消息广播给所有连接的客户端 ``` 6. 创建一个 HTML 模板文件 `index.html` 来渲染聊天室页面: ```html <!DOCTYPE html> <html> <head> <title>WebSocket Chat</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js"></script> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> </head> <body> <h1>WebSocket Chat</h1> <div id="chat"> <ul id="messages"></ul> <form> <input id="input" autocomplete="off" /><button>Send</button> </form> </div> <script> var socket = io(); $('form').submit(function(e){ e.preventDefault(); // 阻止表单提交 var message = $('#input').val(); socket.emit('message', message); $('#input').val(''); return false; }); socket.on('message', function(data){ $('#messages').append($('<li>').text(data)); }); </script> </body> </html> ``` 7. 最后,在 `app.py` 文件的末尾添加以下代码来运行应用程序: ```python if __name__ == '__main__': socketio.run(app) ``` 这样,你就实现了一个简单的 WebSocket 聊天后端。你可以运行 `app.py` 文件,并在浏览器中访问 `http://localhost:5000` 来使用聊天室。请确保客户端也实现了 WebSocket 连接和消息传递的逻辑。 这只是一个示例,你可以根据自己的需求和喜好来扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值