Tag: websocket

Tomcat 8 getOpenSessions()没有为终点返回所有会话?

我正在研究我的第一个WebSocket应用程序,当这样的代码不能持续工作时,我感到很惊讶: @ServerEndpoint(value=”/msg/{owner}”, encoders=MessageEncoder.class, decoders=MessageEncoder.class) public class WebSocketListener { public WebSocketListener() { } @OnOpen public void open(Session session, @PathParam(“owner”) String owner) { if (session.getUserPrincipal() != null) { session.getUserProperties().put(“owner”, owner); } else { try { session.close(new CloseReason(CloseReason.CloseCodes.CANNOT_ACCEPT, “Not authorized”)); } catch (IOException e) { } } } @OnClose public void close(Session session) { } @OnError public void […]

适用于多个用户的Spring websocket安全性

我想在spring应用程序中使用websocket来处理联系请求。 我已经为用户设置了登录页面,我使用了spring security。 我的问题如下:如何安全地向两个不同的用户发送Web套接字消息。 我知道我可以使用@SendTo()向每个订阅某个主题的用户广播消息,并且只能通过类似的方式向一个用户广播消息 messagingTemplate .convertAndSendToUser(principal.getName(), “/queue/requests”, request); 因为他的用户名存储在本金中。 我的问题是如何处理我们必须从请求中定位2个用户并使其安全,以便您无法在未经授权的情况下从客户端收听任何渠道。 理想情况下,我正在寻找类似的东西 messagingTemplate .convertAndSendToUser(request.getFromUser(), “/queue/requests”, request) messagingTemplate .convertAndSendToUser(request.getToUser(), “/queue/requests”, request)

Websocket文件上传速度问题(Java websocket API和Javascript)

我几乎没有做过websocket文件上传function。 但上传速度似乎很慢。 我已经使用Java API for websocket Server和javascript for client。 服务器: package websocket; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import javax.websocket.CloseReason; import javax.websocket.EndpointConfig; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint(“/receive/fileserver”) public class FileServer { static File uploadedFile = null; static String fileName = null; static FileOutputStream […]

一旦队列填满,WebSocket异步发送可能导致阻止发送

我有非常简单的基于Jetty的websockets服务器,负责流式传输小二进制消息以连接客户端。 为避免在服务器端出现任何阻塞,我使用的是sendBytesByFuture方法。 在将负载从2个客户端增加到20个后,它们将停止接收任何数据。 在故障排除期间,我决定打开同步发送方法,最后得到了可能的原因: java.lang.IllegalStateException: Blocking message pending 10000 for BLOCKING at org.eclipse.jetty.websocket.common.WebSocketRemoteEndpoint.lockMsg(WebSocketRemoteEndpoint.java:130) at org.eclipse.jetty.websocket.common.WebSocketRemoteEndpoint.sendBytes(WebSocketRemoteEndpoint.java:244) 客户端在接收数据时不进行任何计算,因此可能无法成为缓慢的加入者。 所以我想知道我该怎么做才能解决这个问题? (使用Jetty 9.2.3)

如何使用Spring 4在我的webSocket服务器中捕获连接事件?

我按照https://github.com/rstoyanchev/spring-websocket-portfolio和这个http://assets.spring.io/wp/WebSocketBlogPost进行了与spring 4,STOMP和sock.js的简单web套接字通信。 HTML 好吧,我想知道是否有可能捕获连接事件,例如新客户端连接到我的服务器或客户端断开连接时,是否可以在Spring 4.0.0中进行?

ServerEndpoint和web.xml

我有一些Soap,REST servlet和现在一个WebSocket: @ServerEndpoint(“/game”) public class WebSocketgame{ … } 我有下一个麻烦:如果web.xml存在,WebSocket不可见。 在web.xml中描述了jdbc资源,servlets ant等…当我删除web.xml时 – websocket成功可见。 我该如何解决这个问题? 更新web.xml: com.sun.xml.ws.transport.http.servlet.WSServletContextListener ConfigServlet com.example.ConfigServlet 1 MainService com.sun.xml.ws.transport.http.servlet.WSServlet 1 ConfigServlet /ConfigServlet JsonServlet com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.example.json 1 JsonServlet /json/* propfile /WEB-INF/server_config.txt MainService /MainService 30 postgreSQL Datasource example jdbc/postgres javax.sql.DataSource Container

如何使用socket.io进行后备工作?

我想将WebSocket与Java一起使用。 问题是,我的服务器通过无法配置的代理与客户端分离。 我一直在寻找具有后退function的WebSocket实现,例如long-polling 。 我找到了socket.io但不知道后备是如何工作的。 在哪种情况下它取代WebSocket以及如何? 是否有其他库,如socket.io与回退实现? 我想在Java找到一个,但我只找到了Jetty 。 编辑:回退只取决于浏览器与WebSocket的兼容性吗? 如果失败的原因是代理配置错误,那么socket.io会将其检测为兼容性故障,从而切换到长轮询(或其他技术)? 答:从v1开始,socket.io包含engine.io ,它带来了以下function:

Spring 4 STOMP Websockets Heartbeat

我似乎找不到如何在Spring中使用websockets向客户端发送心跳的好资源! 我有一个使用此配置运行的基本服务器: @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker(“/room”); config.setApplicationDestinationPrefixes(“/app”); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint(“/channels”).withSockJS(); } } 然后我使用这样的东西向订阅房间的人发送消息: this.simpMessagingTemplate.convertAndSend(“/room/” + this.roomId, message); 这是用于与服务器通信的客户端代码: this.connect = function (roomNameParam, connectionCallback) { var socket = new SockJS(‘http://localhost:8080/channels’), self.stompClient = Stomp.over(socket); self.stompClient.connect({}, function (frame) { self.stompClient.subscribe(‘/room/’ + roomNameParam, […]

未找到404的Spring websocket

我正在尝试用spring创建一个websocket端点。 但每当我尝试从客户端连接时,我得到404.我也有一个Java实现 @ServerEndpoint(value = “/websocket”) 这很好用。 下面是我的spring实现的代码,它不起作用。 我在这做错了什么? package com.tlab.endpoint; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(socketHandler(),”/socket”);; } @Bean public WebSocketHandler socketHandler() { return new SocketHandler(); } } 下面是处理程序 package com.tlab.endpoint; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; […]

通过ServletContextListener中的SimpMessagingTemplate向所有客户端发送消息

我正在使用Spring框架,我有一个工作的websocket控制器,如下所示: @Controller public class GreetingController { @MessageMapping(“/hello”) @SendTo(“/topic/greetings”) public Greeting greeting(HelloMessage message) throws InterruptedException { return new Greeting(“Hello, ” + message.getName() + “!”); } } 我也有这个配置: @Configuration @EnableWebSocketMessageBroker public class HelloWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker(“/topic”); config.setApplicationDestinationPrefixes(“/app”); } public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint(“/hello”).withSockJS(); } } 那部分效果很好! 我可以使用Stomp.js在两个或多个浏览器之间成功发送和接收消息。 这是不起作用的部分。 我已经实现了一个ServletContextListener […]