将ws变成wss的程序是什么?
wss是通过普通HTTP进行升级还是wss只能用于HTTPS?
webSocket = new WebSocket("ws://localhost:port/Esv/ocp");
Run Code Online (Sandbox Code Playgroud)
当我把ws改为wss时工作正常
webSocket = new WebSocket("wss://localhost:port/Esv/ocp");
Run Code Online (Sandbox Code Playgroud)
它显示了这个错误:
连接建立错误:net :: ERR_SSL_PROTOCOL_ERROR
我需要ServletContext从内部获取@ServerEndpoint,以便找到Spring ApplicationContext并查找Bean.
目前我最好的方法是在JNDI命名上下文中绑定该bean并在其中查找它Endpoint.欢迎任何更好的解决方案.
我也在寻找一种合理的方法来将servlet HttpSession与websocket 同步Session.
我试图使用在Android中实现WebSocket客户端的类.但是我收到以下错误:
12-07 11:22:46.286 31579-31579/com.domain.wsocketchat W/System: ClassLoader referenced unknown path: /data/app/com.domain.wsocketchat-2/lib/arm
12-07 11:22:46.392 31579-31579/com.domain.wsocketchat W/System.err: an error occurred:java.net.SocketException: socket failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
我正在使用的课程如下:
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.drafts.Draft_10;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
public class EmptyClient extends WebSocketClient {
public EmptyClient(URI serverUri, Draft draft) {
super(serverUri, draft);
}
public EmptyClient(URI serverURI) {
super(serverURI);
}
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println("new connection opened");
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("closed with exit code " + …Run Code Online (Sandbox Code Playgroud) 我收到了一个Web应用程序,使用Spring通过WebSockets Messaging使用STOMP实现,类似于此处描述的(在后端使用RabbitMQ).它在Tomcat上运行,我可以使用常规URL连接到应用程序(例如http://host/server/).我还获得了一个演示客户端 - 一个JSPX页面,它使用了Modernizr WebSockets和SockJS.demo客户端中的连接代码如下所示:
if (Modernizr.websockets) {
socket = new WebSocket('ws://host/server/endpointx');
}
else {
socket = new SockJS('/server/endpointy');
}
stompClient = Stomp.over(socket);
stompClient.connect(headers, function(frame) { ... });
....
Run Code Online (Sandbox Code Playgroud)
演示客户端工作正常(当我在浏览器中加载JSPX页面时,我可以连接到服务器).但我的目标是使用一些Java STOMP库连接到同一台服务器.问题是,我尝试过的库需要主机和端口作为连接参数:例如,使用ActiveMQ Stomp库:
StompConnection connection = new StompConnection();
connection.open("host", port);
connection.connect(new HashMap<String, String>());
Run Code Online (Sandbox Code Playgroud)
如果我指定port为61613,连接成功,但我直接打了RabbitMQ,而不是我的服务器(这不是我想要的).如果我指定8080(或80),在连接时我得到一个错误
位于org.apache.activemq.transport.stomp.StompConnection的org.apache.activemq.transport.stomp.StompWireFormat.unmarshal(StompWireFormat.java:137)java.io.DataInputStream.readByte(未知来源)的java.io.EOFException .receive(StompConnection.java:77)org.apache.activemq.transport.stomp.StompConnection.receive(StompConnection.java:68)atg.apache.activemq.transport.stomp.StompConnection.connect(StompConnection.java:139) )at .... stomp.impl.activemq.ActiveMQStompDriver.connect(ActiveMQStompDriver.java:39)... 25更多
和跟踪显示这是因为CONNECT帧永远不会收到预期的CONNECTED帧(事实上,它不会收到任何回复).
所以我很困惑:我使用了错误的端口吗?或处理一些库不兼容?或者我是否需要以某种方式指示Tomcat我想要将HTTP连接升级到WebSockets?
如果上面的问题很难回答,那么这个问题同样有用:如何通过使用Java在Tomcat上运行的WebSockets消息通道上的STOMP连接到Spring应用程序?
我试图使用TooTallNate的Java-Websocket库来创建一个websocket客户端,它接收来自coinbase交换websocket流的消息.我正在将我用Python制作的程序移植到Java中,因为Python中存在并行化瓶颈,据我所知,我在Java中做的事情与在Python中做的相同.这是我使用这个websocket lib在Python中打开连接的代码(这可以按预期工作):
ws = websocket.create_connection("wss://ws-feed.exchange.coinbase.com", 20)
ws.send(json.dumps({
"type": "subscribe",
"product_id": "BTC-USD"
}))
Run Code Online (Sandbox Code Playgroud)
这是我的整个Java类:
public class CoinbaseWebsocketClient extends WebSocketClient {
private final Gson gson = new Gson();
private CoinbaseWebsocketClient(URI serverURI) {
super(serverURI, new Draft_17());
connect();
}
private static URI uri;
private static CoinbaseWebsocketClient coinbaseWebsocketClient;
static {
try {
uri = new URI("wss://ws-feed.exchange.coinbase.com");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
protected static CoinbaseWebsocketClient get() {
if (coinbaseWebsocketClient == null) {
coinbaseWebsocketClient = new …Run Code Online (Sandbox Code Playgroud) 我发现Spring WebSocket支持的当前文档指示用户使用stomp.js进行客户端JavaScript实现,这让我感到惊讶.
这个项目,在它的GitHub页面上的自述文件中说:
该项目不再维护.
如果您遇到错误或需要增强功能,您可以分叉并修改它,因为项目在Apache License 2.0下.
自2015年9月以来,该存储库没有任何提交(这只是为了将上述内容添加到自述文件中),并且自2014年12月以来没有代码提交,因此在过去的两年中它已被有效地放弃.
我不确定该存储库的284个分支中的哪个将是该库的稳定和最新版本,并且似乎没有可行的替代方案来自Google搜索.
有人可以推荐一个可以替代使用的稳定替代品吗?
理想情况下,我希望Spring团队能够为正确的客户端库提供一些指导,以便与他们的STOMP支持一起使用.
我正在使用Java编写一个小型游戏服务器.
我使用TooTallNate-Java-Websockets库来创建我的websocket服务器.当我在localhost上运行我的服务器时一切正常,我可以从任何地方连接到它.但是当我将我的应用程序提交给Heroku时,每次我尝试建立套接字连接时都会收到错误ECONNREFUSED(连接被拒绝).
值得一提的是,当我使用应该模拟heroku环境的工头运行我的应用程序时,一切都按预期工作.
作为我的websocket服务器的端口,我尝试使用8080和5000到8000之间的许多其他.
我只能猜测heroku上发生了什么,因为日志只包含http请求的基本信息.
请帮忙,我接近放弃:(
编辑
这是我在Proc文件中的内容:
web: ./build/install/my-app/bin/my-app
Run Code Online (Sandbox Code Playgroud)
UPDATE 创建了一个简单的抽象应用程序来展示问题:(当然,在工头测试,它在本地环境中工作)
WebSocket connection to 'wss://test-websocket-yan.herokuapp.com:39773/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED我使用javax.websocket类连接到Java中的websocket服务器.
import javax.websocket.DeploymentException;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import java.io.IOException;
import java.net.URI;
public class WSClient {
private WebSocketContainer webSocketContainer;
public void sendMessage(URI endpointURI, String message) throws IOException, DeploymentException {
Session session = webSocketContainer.connectToServer(MyClientEndpoint.class, endpointURI);
session.getAsyncRemote().sendText(message);
}
}
Run Code Online (Sandbox Code Playgroud)
对于初始HTTP握手,我想在客户端向请求添加额外的HTTP标头
这可能吗?
我知道这可以在服务器端使用ServerEndpointConfig.Configurator.modifyHandshake.客户端是否有类似的解决方案?
我已经使用Spring MVC实现了Web Socket,它对我来说很好用,即从一个浏览器工作到另一个浏览器,这个浏览器使用这个代码打开.
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public HelloMessage greeting(HelloMessage message) throws Exception {
Thread.sleep(3000); // simulated delay
return message;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我从正常的api控制器调用@SendTo("/ topic/greetings").我尝试使用它但它对我不起作用
@RequestMapping(value = "/sendMessage")
@SendTo("/topic/greetings")
public HelloMessage sendMessage() throws Exception {
return new HelloMessage((int) Math.random(), "This is Send From Server");
}
Run Code Online (Sandbox Code Playgroud)
对此有何看法?
谢谢
如何使用Java WebSocket API关闭websocket连接?我已经将Java websocket API用于服务器端点和客户端端点.该应用程序运行正常.但是我不知道在主线程结束之前如何关闭websocket.
这是我的ClientEndpoint
package websocket.client;
import java.io.IOException;
import javax.websocket.MessageHandler;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
@ClientEndpoint
public class EchoClient {
Session session;
//request
@OnOpen
public void onOpen(Session session, EndpointConfig config) {
System.out.println("Connected to endpoint: " + session.getBasicRemote());
this.session = session;
sendMessage("Welcome to WebSocket");
}
//response
@OnMessage
public void onMessage(String text) {
System.out.println("Received response in client from server: " + text);
}
@OnError
public void onError(Session session, Throwable t) {
t.printStackTrace();
}
private void sendMessage(String message) …Run Code Online (Sandbox Code Playgroud) java-websocket ×10
websocket ×8
java ×5
stomp ×2
android ×1
heroku ×1
httpsession ×1
java-ee ×1
java-server ×1
servlets ×1
spring ×1
spring-mvc ×1
tomcat ×1