【问题标题】:How to use Websockets with Pyramid and socket.io?如何将 Websockets 与 Pyramid 和 socket.io 一起使用?
【发布时间】:2012-04-02 00:57:34
【问题描述】:

我正在尝试使用 Pyramid 和 socket.io 框架创建一个简单的 WebSocket 应用程序。 服务器端代码:

from pyramid.response import Response
from pyramid_socketio.io import SocketIOContext, socketio_manage
import gevent

def includeme(config):
    '''
    This method is called on the application startup.
    '''
    config.add_route('socket.io', 'socket.io/*remaining')

class ConnectIOContext(SocketIOContext):
    # self.io is the Socket.IO socket
    # self.request is the request
    def msg_connect(self, msg):
        print "Connect message received", msg
        self.msg("connected", hello="world")

# Socket.IO implementation
@view_config(route_name="socket.io")
def socketio_service(request):
    print "Socket.IO request running"
    print request
    retval = socketio_manage(ConnectIOContext(request))
    return Response(retval)

客户端代码:

<script>
    var socket = null;
    $(document).ready(function() {
        socket = new io.Socket(null, null);
        socket.on('connect', function() {
        console.log("Connected");
        socket.send({type: "connect", userid: 123});
    });
    socket.on('message', function(obj) {
        console.log("Message received");
        console.log("Message", JSON.stringify(obj));
        if (obj.type == "some") {
            console.log("do some");
        }
    });
    socket.on('error', function(obj) {
        console.log("Error", JSON.stringify(obj));
    });
    socket.on('disconnect', function() {
        console.log("Disconnected");
    });

    console.log("Connecting...");
    socket.connect();
});
</script>  

我需要这段代码来使用 web 套接字进行连接,但它会退回到 XHR 轮询。 我该如何解决?

提前致谢,伊万。

【问题讨论】:

    标签: javascript python websocket socket.io pyramid


    【解决方案1】:

    您可能想查看最新版本的 gevent-socketio 及其文档http://gevent-socketio.readthedocs.org/

    John Anderson、Sébastien Béal 和我本人在 PyCon 2012 sprints 上进行了一次大修。

    【讨论】:

    • 要真正回答这个问题,应该有一个 {transports: ["websocket"]} 对象作为 io.Socket() 调用的第二个参数传入,即使用版本 0.6客户端库。如果您使用的是 0.7+ 版本的 JS 库,则它未在服务器端设置。您还必须使用启用了 web-sockets 的网络浏览器(我知道 Chrome 是可以工作的)。
    • gevent-socketio 开发已经死了,不要太依赖它。
    • Ravi- 这一步中的两个答案都提到使用 gevent-socketio,你会推荐使用什么?
    【解决方案2】:

    您还可以查看pyramid_sockjs。它与 Pyramid 很好地集成,并使用 sockjs 来完成与 socket.io 相同的角色,并且可以说更容易理解。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2012-01-17
    相关资源
    最近更新 更多