web2py / websockets - websocket_messaging.py中的示例不起作用?

时间:2015-07-31 10:49:21

标签: websocket tornado web2py

我完全按原样复制了gluon/contrib/websocket_messaging.py文件中的两个操作。

控制器/ debug.py:

def index():
    form=LOAD('debug','ajax_form',ajax=True)
    script=SCRIPT('''
        jQuery(document).ready(function(){
          var callback=function(e){alert(e.data)};
          if(!web2py_websocket('ws://127.0.0.1:8888/realtime/mygroup',callback))
            alert("html5 websocket not supported by your browser, try Google Chrome");
        });
    ''')
    return dict(form=form, script=script)

def ajax_form():
    form=SQLFORM.factory(Field('message'))
    if form.accepts(request,session):
        from gluon.contrib.websocket_messaging import websocket_send
        websocket_send(
            'http://127.0.0.1:8888',form.vars.message,'mykey','mygroup')
    return form

视图/调试/ index.html中:

{{extend 'layout.html'}}
{{=form}}
{{=script}}

但是当我连接到网站时,我看到以下错误消息:

Firefox can't establish a connection to the server at ws://127.0.0.1:8888/realtime/mygroup

我像这样启动服务器:

python gluon/contrib/websocket_messaging.py -k mykey -p 8888

并且有消息:

WARNING:tornado.access:403 GET /realtime/mygroup (127.0.0.1) 0.55ms

但是我可以看到我发送的任何消息,它只是不会通过alert功能弹出。

作为免责声明,我是java和websockets的新手,所以我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

所以问题是我的websocket_messaging.py遗漏了以下内容:

def check_origin( self , origin ):
    return True
class DistributeHandler(tornado.websocket.WebSocketHandler)

中的

尽管https://github.com/web2py/web2py/blob/master/gluon/contrib/websocket_messaging.py已正确实施此功能。 (见第149行)

我正在运行web2py 2.11.2所以不知道这是否是预期的,我也通过web2py管理界面更新,而不是通过下载新的web2py实例。不确定这是否会导致问题。

无论哪种方式都解决了!