标签: atmosphere

无法从START_OBJECT标记中反序列化java.lang.String的实例

我遇到了一个问题,我的可部署jar遇到了一个异常,当我在IntelliJ中本地运行时,这个异常不会发生.

例外:

Receiving an event {id=2, socket=0c317829-69bf-43d6-b598-7c0c550635bb, type=getDashboard, data={workstationUuid=ddec1caa-a97f-4922-833f-632da07ffc11}, reply=true}
Firing getDashboard event to Socket#0c317829-69bf-43d6-b598-7c0c550635bb
Failed invoking AtmosphereFramework.doCometSupport()
java.lang.IllegalArgumentException: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: N/A; line: -1, column: -1]
        at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2502)
        at org.codehaus.jackson.map.ObjectMapper.convertValue(ObjectMapper.java:2468)
        at com.github.flowersinthesand.portal.support.DefaultDispatcher$DefaultHandler$DataParam.resolve(DefaultDispatcher.java:270)
        at com.github.flowersinthesand.portal.support.DefaultDispatcher$DefaultHandler.handle(DefaultDispatcher.java:204)
        at com.github.flowersinthesand.portal.support.DefaultDispatcher.fire(DefaultDispatcher.java:107)
        at com.github.flowersinthesand.portal.support.AbstractSocketFactory.fire(AbstractSocketFactory.java:73)
        at com.github.flowersinthesand.portal.atmosphere.AtmosphereSocketFactory.onRequest(AtmosphereSocketFactory.java:75)
        at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:256)
        at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:166)
        at org.atmosphere.container.Grizzly2WebSocketSupport.service(Grizzly2WebSocketSupport.java:75)
        at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1342)
        at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:219)
        at org.atmosphere.websocket.DefaultWebSocketProcessor$2.run(DefaultWebSocketProcessor.java:183)
        at org.atmosphere.util.VoidExecutorService.execute(VoidExecutorService.java:101)
        at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:178)
        at org.atmosphere.websocket.DefaultWebSocketProcessor.invokeWebSocketProtocol(DefaultWebSocketProcessor.java:167)
        at org.atmosphere.container.Grizzly2WebSocketSupport$Grizzly2WebSocketApplication.onMessage(Grizzly2WebSocketSupport.java:171)
        at org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:164)
        at org.glassfish.grizzly.websockets.frametypes.TextFrameType.respond(TextFrameType.java:70)
        at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
        at org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) …
Run Code Online (Sandbox Code Playgroud)

java deployment grizzly atmosphere

58
推荐指数
4
解决办法
20万
查看次数

忽略Spring Security SavedRequest中的WebSocket连接

我有一个带有spring-security-core插件和Atmosphere框架的Grails应用程序.

如果我从已打开WebSocket连接的页面注销,则Spring Security会将WebSocket连接的URL保留为SavedRequest.

DEBUG savedrequest.HttpSessionRequestCache  - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/formx/formX/update]
DEBUG savedrequest.HttpSessionRequestCache  - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/formx/formX/notifications/?X-Atmosphere-Transport=close&X-Atmosphere-tracking-id=b5d8fde4-d950-41fd-9b49-02e06799a36f&conversationId=988080042]
Run Code Online (Sandbox Code Playgroud)

日志中的第一个条目具有SavedRequest的正确值,但不知何故它被Atmosphere WebSocket连接覆盖.

如何告诉Spring Security不要将Atmosphere WebSocket连接用作SavedRequest?

我想我可以使用一些Atmosphere Protocol Specific Header来区分连接.

grails spring-security websocket atmosphere

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

Websocket框架大小限制

我通过websockets发送大量的JSON数据.JSON可能有超过1000个条目.由于帧大小限制,Websocket协议自动将JSON分成帧,这是无法帮助的.因为我们无法改变websockets的框架大小.

问题:

当我尝试使用JSON.parse它来评估我的JSON时,给出了一个解析错误,这很明显,因为这些帧不是完整的JSON对象.所有这些都发生在Websocket onmessage事件回调中.如何在不同的帧中接收巨大的JSON并仍然能够解析它?我试图在onmessage仍然错误仍然存​​在的情况下连接帧.

问题:

如何正确地破解破解的JSON?

javascript string json websocket atmosphere

16
推荐指数
2
解决办法
4万
查看次数

找不到Java类的消息正文编写器...和MIME媒体类型text/html

我正在使用jms/atmosphere框架在两个应用程序之间进行通信.其中一个应用程序是主题的消息生成器,发送以下类型的自定义对象:

    @XmlRootElement
    public class A implements Serializable{
    public A(){}

    /* some private properties */

   }
Run Code Online (Sandbox Code Playgroud)

另一方面,不止一个消费者正在监听该主题并根据ID进行不同的订阅.

    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public SuspendResponse<A> subscribe() {
    return new SuspendResponse.SuspendResponseBuilder<A>()
            .broadcaster(topic)
            .outputComments(true)
            .addListener(new EventsLogger()).build();
    } 
   @Override
public void incomingBroadcast() {
    try {
        String id = getID();
        if (id.startsWith("/*")) {
            id = "atmosphere";
        }

        logger.info("Looking up Connection Factory {}", FACTORY_NAME);
        Context ctx = new InitialContext();
        ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup(FACTORY_NAME);

        logger.info("Looking up topic: {}", TOPIC_NAME);
        Topic topic = (Topic) ctx.lookup(TOPIC_NAME);

        connection = connectionFactory.createConnection();
        session = connection.createSession(false, …
Run Code Online (Sandbox Code Playgroud)

java json glassfish jersey atmosphere

15
推荐指数
2
解决办法
3万
查看次数

如何使用Atmosphere设计推送通知

我想用气氛来开发通知系统.

我是Atmosphere的新手,如果我在某个地方错了,请道歉.我理解的是当Actor发布我将通知操作保存到数据库的东西时.我不明白接收器如何实时接收这些通知.

我知道的发件人会做以下事情

event.getBroadcaster().broadcast(
            objectMapper.writeValueAsString("Some Message"));
Run Code Online (Sandbox Code Playgroud)

现在我无法弄清楚接收器如何接收此消息.

例如 .我想添加一个用户对象作为朋友.因此,当User1添加User2 User1广播时,而不是我如何将通知推送到User2.我很难理解这一点.

从技术上讲,我想要类似facebook或gmail通知的东西,用户活动中的其他用户会收到通知.

java spring spring-mvc atmosphere

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

无法使用'roles'包向meteor用户添加角色

我正在尝试使用Atmosphere上提供的"角色"包但我无法使用Accounts.onCreateUser(),我可以在github上获取示例.当我注册一个用户时,我想为他们添加一个角色,当我测试角色是否被分配时,它不会捡起它.

这是我的代码

/server/users.js

Accounts.onCreateUser(function(options, user){
  var role = ['admin'];
  Roles.addUsersToRoles(user, role);
  return user;
});
Run Code Online (Sandbox Code Playgroud)

/client/page.js

Template.hello.events({
  'click input': function () {
    var loggedInUser = Meteor.user();
    if (Roles.userIsInRole(loggedInUser, ['admin'])) {
      console.log("Hi Admin!");
    }else{
      console.log("Please Log In");
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

javascript roles atmosphere meteor

14
推荐指数
4
解决办法
8406
查看次数

亚马逊ec2上的Websockets连接失败

我有一个运行大气框架的netty服务器,用于通过websockets实时通知系统.

该系统在我的本地机器上运行完美,但是当我在EC2上部署时,它似乎不起作用.我可以telnet到远程Netty服务器.可以访问服务器并在EC2上打开端口

Firefox抛出以下错误

Using URL: ws://beta.myapp.com:2880/myhandle?id=1&name=Chinese_food_rule_2&    X-Atmosphere-tracking-id=35490c47-59d6-abf6-36fa-431aa340d90a&X-Atmosphere-Framework=0.9&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json

Websocket error, reason: undefined

Firefox can't establish a connection to the server at ws://beta.myapp.com:2880/myhandle?id=1&name=Chinese_food_rule_2&X-Atmosphere-tracking-id=35490c47-59d6-abf6-36fa-431aa340d90a&X-Atmosphere-Framework=0.9&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json.

Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent).
Run Code Online (Sandbox Code Playgroud)

服务器甚至没有得到请求,这让我觉得这是一些我不知道的EC2网络套接字问题.

amazon-ec2 websocket atmosphere netty

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

大气:如何从Grails的webSocket连接登录用户?

我正在努力将WebSockets功能引入我的Grails应用程序.为此,我使用Atmosphere Meteor插件0.7.1.工作流程很简单:

  • 用户登录系统.
  • 具有WebSockets功能的用户打开页面
  • 用户单击"连接"按钮以建立连接... 并且服务器无法识别他.

我想知道哪个用户连接了我的webSocket.

通常,通过springSecurityService.getPrincipal()在任何控制器中调用来检测当前用户非常容易.我设法向springSecurityService我的MeteorHandler 注入,但是它表示校长是null.这对我来说很奇怪,因为处理程序可以访问JSESSIONIDcookie,所以我希望它能够检索正确的会话数据.

此外,request.session与在常规控制器操作中执行的相同命令相比,命令返回不同的HttpSession对象.

那么有没有办法在webSockets连接上检索当前登录的用户?

提前致谢.

grails spring-security websocket atmosphere

9
推荐指数
1
解决办法
1172
查看次数

HTTP请求返回200 OK,但没有响应内容

在开发特定网站时,我在Firefox中加载网站时出现间歇性问题(无法在IE或Chrome中进行比较).该网站加载了几个javascript文件,css样式表,图像等.偶尔,一个或多个文件无法正确加载.响应表示状态为200 OK,但内容长度表示0.这会在不同时间在不同文件上发生.当它是一个无法加载的javascript文件时,该网站无法正常运行,但仍可能显示内容.当它恰好是无法加载的index.html文件时,Firefox会显示一个带有以下html的空白页面:

<html>
<head></head>
<body><pre></pre></body>
</html>
Run Code Online (Sandbox Code Playgroud)

(我相信这是来自Firefox的默认"空"页面视图)

似乎可以从浏览器缓存中正确获取先前成功的加载,并且响应状态为304 Not Modified.失败后,下次请求资源时,我们会看到200 OK的响应状态,后续请求再次响应304.

以下是Firebug报告的请求/响应标头的示例:


一般成功案例:(响应状态:304未修改,内容长度:288)

请求标题:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en/q=0.5
Connection: keep-alive
Cookie: JSESSIONID=<shouldn't matter>
Host: ???.???.???.???:8442
If-Modified-Since: Tue, 29 Apr 2014 13:18:26 GMT
If-None-Match: W/"228-1398777506000"
Referrer: https://???.???.???.???:8442/mySite/
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20131023 Firefox/17.0 
Run Code Online (Sandbox Code Playgroud)

响应标题:

Cache-Control: no-cache
Date: Tue, 29 Apr 2014 13:36:35 GMT
Etag: W/"288-1398777506000"
Expires: Thu, 01 Jan 1970 00:00:00 GMT-00:00
Pragma: No-cache
Server: Apache-Coyote/1.1 
Run Code Online (Sandbox Code Playgroud)

缓存中的响应标头:

Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 288
Content-Type: text/javascript …
Run Code Online (Sandbox Code Playgroud)

javascript jboss http atmosphere

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

如何通过Apache HTTP服务器获得Vaadin Push工作?

我正在尝试将Vaadin 7.1.5推送到Apache Tomcat 7.0.42 + Apache HTTP服务器(带有mod_proxy_wstunnel的2.2.14).

当我直接访问Tomcat时(即http://mydomain:8080/myapp),Vaadin应用程序和WebSocket推送工作正常.当我尝试使用Apache模块mod_proxy和mod_proxy_wstunnel访问它时出现问题.发生的情况是应用程序挂起,加载指示器变红,我在浏览器控制台的推送请求中收到此错误:

HTTP Status 501 - Websocket protocol not supported
type Status report
message Websocket protocol not supported
description The server does not support the functionality needed to fulfill this request.

Apache Tomcat/7.0.42
Run Code Online (Sandbox Code Playgroud)

需要推之前,我使用的mod_jk从请求转发http://mydomain/myapphttp://mydomain:8080/myapp.Apparenly mod_jk不支持WebSocket所以我选择使用ProxyPass指令.这是我的Apache配置:

ProxyPass               /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/
ProxyPassReverse        /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/

ProxyPass               /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPassReverse        /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPass               /myapp http://localhost:8080/myapp
ProxyPassReverse        /myapp http://localhost:8080/myapp
Run Code Online (Sandbox Code Playgroud)

我怀疑mod_proxy_wstunnel应该受到责备,但显然当我代理http://echo.websocket.org时,它工作正常.我发现Atmosphere抛出了501错误,但我不知道如何调试它.如果我删除了ws代理(因此push使用HTTP而不是WS),我会立即得到"Session expired"错误.

有谁知道如何正确地代理从Apache HTTP服务器到Apache Tomcat的推送请求?

push apache2 vaadin atmosphere tomcat7

7
推荐指数
1
解决办法
6049
查看次数