网站制作留钱,大庆医院网站建设方案,网页链接加密,桂林论坛爆料实现场景#xff1a;每在小程序中添加一条数据时#xff0c;后台将主动推送一个标记给PC端#xff0c;PC端接收到标记将进行自动播放音频。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import or…实现场景每在小程序中添加一条数据时后台将主动推送一个标记给PC端PC端接收到标记将进行自动播放音频。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;Configuration
public class WebSocketConfig {Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}import org.springframework.stereotype.Component;import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;Component
ServerEndpoint(/websocket)
public class WebSocketServer {private static final CopyOnWriteArraySetWebSocketServer connections new CopyOnWriteArraySet();private Session session;OnOpenpublic void onOpen(Session session) {this.session session;connections.add(this);this.sendMessage(0);}OnClosepublic void onClose() {connections.remove(this);System.out.println(连接关闭: session.getId());}OnErrorpublic void onError(Throwable error) {System.out.println(错误信息error.getMessage());error.printStackTrace();}private void sendMessage(String message) {try {this.session.getBasicRemote().sendText(message);} catch (IOException e) {e.printStackTrace();}}public static void broadcast(String message) {for (WebSocketServer client : connections) {client.sendMessage(message);}}}
Overridepublic void addUser(req req) {QueryWrapperUser userWrapper new QueryWrapper();userWrapper .eq(name,req.getName());User u userMapper.selectOne(userWrapper);if (u null){WebSocketServer.broadcast(1);}}
每次小程序调用 addUser() 方法时都会执行 WebSocketServer.broadcast(1); 这时候触发主动推送消息给PC端。 遇到的问题 Error during WebSocket handshske: Unexpected response code: 200
解决方案 本地项目中存在账号密码验证的过滤器其中 /websocket 进行了转发所以需要过滤请求 重新启动项目即可。 部署到线上的操作websocket的地址wss://xxx.com/api/websocket 其中 /api/websocket为自己项目中的websocket的接口地址
1.修改ws的地址 - 将本地IP修改为线上域名
2.修改nginx
3.PC端进行访问并且查看日志是否连接成功
出现的问题
1.Error during WebSocket handshake: Unexpected response code: 301 域名为 https 需要将 ws 修改为 wss
2.Error during WebSocket handshake: Unexpected response code: 404 nginx 里面对当前域名进行 websocket 配置 参考地址https://www.cnblogs.com/cnsyear/p/12635301.html