使用 jar 包 , 连接 websocket, 用域名的方式连接失败, 中间有通过 nginx 转发
<dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.3</version></dependency>
用浏览器的控制台 new Websocket(wss://域名) 已经成功
nginx 配置正常的 , 用于 websocket 的配置添加了
proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_http_version 1.1;
使用 ws://域名 方式报 400 错误
用 wss://域名 方式 nginx 连请求都没收到
域名是买的, 是能通过验证的
使用 http 直接连接服务的方式是成功的
java 代码
ClientWs clientWs = new ClientWs(url);clientWs.connect();while (!clientWs.getReadyState().equals(ReadyState.OPEN)) { try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("Connecting..."); if (clientWs.getReadyState() == ReadyState.CLOSED){ System.out.println("连接失败"); System.exit(-1); }}System.out.println("Connected.");
public class ClientWs extends WebSocketClient { public ClientWs(URI serverUri) { super(serverUri); trustAllHosts(this); } public ClientWs(URI serverUri, Map<String, String> httpHeaders) { super(serverUri, httpHeaders); trustAllHosts(this); } @Override public void onOpen(ServerHandshake serverHandshake) { } @Override public void onMessage(String s) { } @Override public void onClose(int i, String s, boolean b) { } @Override public void onError(Exception e) { } static void trustAllHosts(ClientWs clientWs){ TrustManager[] trustAllCerts =new TrustManager[]{new X509TrustManager(){ @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; } }}; try { SSLContext ssl = SSLContext.getInstance("TLS"); ssl.init(null, trustAllCerts,new java.security.SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } }}
你应该使用js来进行连接Websocket,或者使用工具,比如 http://www.jsons.cn/websocket/
或者新版的postman是能支持Websocket,浏览器直接访问ws是不行的
从你提供的信息来看,你正在使用 Java-WebSocket 库来尝试连接到一个通过 Nginx 代理的 WebSocket 服务器,但是遇到了问题。以下是一些可能的原因和解决方案:
ws://
协议连接到服务器,这可能导致 400 错误。你应该使用 wss://
协议来确保连接的安全性。同时,你的 trustAllHosts
方法可能会导致 SSL/TLS 握手失败,因为它接受所有的服务器证书,包括那些可能不安全的证书。你应该检查服务器的证书是否有效,并在可能的情况下使用正确的证书。以下是一个修改后的 ClientWs
类,它使用默认的 SSL 上下文而不是自定义的信任所有主机的 SSL 上下文:
public class ClientWs extends WebSocketClient { public ClientWs(URI serverUri) { super(serverUri); } public ClientWs(URI serverUri, Map<String, String> httpHeaders) { super(serverUri, httpHeaders); } @Override public void onOpen(ServerHandshake serverHandshake) { System.out.println("Connected."); } @Override public void onMessage(String s) { System.out.println("Received message: " + s); } @Override public void onClose(int i, String s, boolean b) { System.out.println("Connection closed: " + s); } @Override public void onError(Exception e) { System.err.println("Error: " + e.getMessage()); e.printStackTrace(); }}
你可以尝试使用这个修改后的类来连接 WebSocket 服务器,看看问题是否得到解决。如果问题仍然存在,你应该进一步调试你的代码和服务器配置,找出问题的根源。
我正在尝试将一个NodeJS脚本移植到第三方服务器,该脚本建立并维护一个Web套接字连接,以使用大猩猩/web套接字包进行Go。在Node脚本中,ping之后会收到一个pong,并且连接会无限期保持活动状态。在Go脚本中,ping/pong可以工作,但大约30秒后服务器会断开连接。 我怀疑使用Go websocket包发送的pings是错误的,但我不能确定这是什么原因。比较运行这些程序时捕获的加密
我正在使用套接字。io,应用程序由AWS提供。我收到一个浏览器控制台错误: websocket.js:54 WebSocket 连接到 'wss://www.tidee.com/socket.io/?EIO=4 客户代码: 服务器代码: 在 AWS 中,安全组接受端口 443,负载均衡器侦听端口 443。 应用程序在本地运行时工作(状态 101),并使用 协议。
问题内容: 我使用NodeJS创建了一个应用程序,并且正在使用ws模块。如果我在本地主机上测试该应用程序,则它可以正常工作,并且连接websockets没有任何问题。现在,我已将应用程序上载到Openshift,当我尝试从客户端访问该应用程序时,它返回,这无法建立与Websocket的连接。 如果我在应用程序中拖入腻子, 则会收到 以下消息: 调试:这种类型的响应一定不能有主体。 忽略传递给end
错误:无法启动连接:错误:WebSocket无法连接。在服务器上找不到连接,endpoint可能不是信号器endpoint,服务器上不存在连接ID,或者存在阻止WebSocket的代理。如果有多台服务器,请检查是否启用了粘性会话。 WebSocketTransport.js:49WebSocket连接到“ws://xxxxxx/生产/网络服务/集线器/spreadhub”失败: Angular.t
从。build/dist/bundle/programs/web.browser中的构建文件中 以下websocket请求将保持挂起状态为101 我没有在流星上写任何代码来运行它到https,我试图通过Nginx处理。添加ssl证书后,从angular尝试通过而不是连接到meteor 请在下面找到我的nginx文件。 任何线索都将不胜感激。
问题内容: 我正在尝试测试安全的网络套接字,但是遇到了麻烦。这是我的测试: 创建后,这是“ ws”的日志: 我没有从打开回来的日志。我正在本地运行该项目,并且当我使用Chrome Advanced Rest Client工具时,可以正常连接。 我想念什么吗?请帮忙。 编辑: 我添加并注销, 我也尝试遵循此代码,但得到相同的错误。 问题答案: 该模块正在拒绝您的自签名证书(正如人们希望的那样)。您可