Как использовать Websockets с Pyramid и socket.io? - PullRequest
5 голосов
/ 16 марта 2012

Я пытаюсь создать простое приложение WebSocket, используя платформы Pyramid и socket.io. Код на стороне сервера:

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>  

Мне нужен этот код для использования веб-сокетов для соединения, но он возвращается к XHR-опросу. Как я могу это исправить?

Заранее спасибо, Иван.

Ответы [ 2 ]

8 голосов
/ 16 марта 2012

Возможно, вы захотите взглянуть на последний выпуск gevent-socketio и его документацию по адресу http://gevent -socketio.readthedocs.org /

Капитальный ремонт был проведен на спринте PyCon 2012 Джоном Андерсоном, Себастьеном Билом и мной.

2 голосов
/ 22 марта 2012

Вы также можете взглянуть на pyramid_sockjs . Он хорошо интегрируется с Pyramid и использует sockjs, который выполняет ту же роль socket.io и, возможно, проще для понимания.

...