标签: java-websocket

ws和wss之间的区别?

将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

websocket java-websocket

31
推荐指数
1
解决办法
2万
查看次数

访问JSR-356 @ServerEndpoint的@OnMessage中的ServletContext和HttpSession

我需要ServletContext从内部获取@ServerEndpoint,以便找到Spring ApplicationContext并查找Bean.

目前我最好的方法是在JNDI命名上下文中绑定该bean并在其中查找它Endpoint.欢迎任何更好的解决方案.

我也在寻找一种合理的方法来将servlet HttpSession与websocket 同步Session.

servlets java-ee httpsession websocket java-websocket

26
推荐指数
2
解决办法
1万
查看次数

在Android中实现websocket客户端的简单方法是什么?以下示例是否正确?

我试图使用在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)

android network-programming websocket java-websocket

22
推荐指数
1
解决办法
3万
查看次数

通过Java客户端使用Spring 4实现的WebSockets连接到Stomp

我收到了一个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)

如果我指定port61613,连接成功,但我直接打了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应用程序?

tomcat stomp websocket spring-websocket java-websocket

19
推荐指数
1
解决办法
914
查看次数

当使用java-websocket库连接到coinbase交换websocket流时,草稿拒绝握手

我试图使用TooTallNateJava-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)

java websocket java-websocket

15
推荐指数
1
解决办法
4781
查看次数

Stomp.js已过时且不再维护 - 哪个Stomp客户端与Spring Websockets一起使用?

我发现Spring WebSocket支持的当前文档指示用户使用stomp.js进行客户端JavaScript实现,这让我感到惊讶.

这个项目,在它的GitHub页面上的自述文件中说:

该项目不再维护.

如果您遇到错误或需要增强功能,您可以分叉并修改它,因为项目在Apache License 2.0下.

自2015年9月以来,该存储库没有任何提交(这只是为了将上述内容添加到自述文件中),并且自2014年12月以来没有代码提交,因此在过去的两年中它已被有效地放弃.

我不确定该存储库的284个分支中的哪个将是该库的稳定和最新版本,并且似乎没有可行的替代方案来自Google搜索.

有人可以推荐一个可以替代使用的稳定替代品吗?

理想情况下,我希望Spring团队能够为正确的客户端库提供一些指导,以便与他们的STOMP支持一起使用.

spring stomp websocket spring-websocket java-websocket

13
推荐指数
2
解决办法
5118
查看次数

使用Java ECONNREFUSED的Heroku Websockets(连接被拒绝)

我正在使用Java编写一个小型游戏服务器.

我使用TooTallNate-Java-Websockets库来创建我的websocket服务器.当我在localhost上运行我的服务器时一切正常,我可以从任何地方连接到它.但是当我将我的应用程序提交给Heroku时,每次我尝试建立套接字连接时都会收到错误ECONNREFUSED(连接被拒绝).

值得一提的是,当我使用应该模拟heroku环境的工头运行我的应用程序时,一切都按预期工作.

作为我的websocket服务器的端口,我尝试使用808050008000之间的许多其他.

我只能猜测heroku上发生了什么,因为日志只包含http请求的基本信息.

请帮忙,我接近放弃:(

编辑

这是我在Proc文件中的内容:

web: ./build/install/my-app/bin/my-app
Run Code Online (Sandbox Code Playgroud)

UPDATE 创建了一个简单的抽象应用程序来展示问题:(当然,在工头测试,它在本地环境中工作)

  1. 我的html/js测试员:Testerpage
  2. 我的主要Java Jetty服务器:Java Main
  3. 控制台错误消息: WebSocket connection to 'wss://test-websocket-yan.herokuapp.com:39773/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

java heroku java-server java-websocket

11
推荐指数
1
解决办法
1244
查看次数

如何在Java Websocket客户端中添加标头

我使用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.客户端是否有类似的解决方案?

java websocket java-websocket

11
推荐指数
2
解决办法
8323
查看次数

如何从正常请求调用中调用@SendTo,即@RequestMapping

我已经使用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 spring-mvc websocket spring-websocket java-websocket

11
推荐指数
1
解决办法
2350
查看次数

用Java关闭websocket连接

如何使用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 java-websocket

11
推荐指数
1
解决办法
8688
查看次数