2012-03-16 4 views
5

私はPyramidとsocket.ioフレームワークを使って簡単なWebSocketアプリケーションを作成しようとしています。 サーバーサイドコード: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> 

私は、接続のためのウェブ・ソケットを使用するには、このコードが必要ですが、それはXHRポーリングにフォールバックします。 どうすれば修正できますか?

ありがとうございます、Ivan。

答えて

8

あなたは、おそらく主要なオーバーホールがジョン・アンダーソン、セバスチャン・ビールと自分で、PyCon 2012のスプリントで行われたhttp://gevent-socketio.readthedocs.org/

で最新gevent-socketioのリリース、およびそのマニュアルを見てみたいです。

+0

実際に質問に答えるには、クライアントライブラリのバージョン0.6を使用しているio.Socket()呼び出しの2番目のパラメータとして渡された{transports:["websocket"]}オブジェクトが必要です。 JS libのバージョン0.7以上を使用している場合は、サーバー側では設定されていません。また、Webソケット対応のWebブラウザ(Chromeは動作することがわかっています)を使用する必要があります。 – abourget

+0

gevent-socketioの開発はかなり死んでいますが、あまり依存しません。 –

+0

Ravi-このトレッドの言い方では、gevent-socketioを使って両方の答えを示していますが、その代わりに何をお勧めしますか? – Amoliski

2

pyramid_sockjsもご覧ください。これはPyramidとうまく統合され、socket.ioと同じ役割を果たすsockjsを使用し、理解するのは間違いなく簡単です。

+3

gevent-socketioの代わりに非難されている:https://github.com/abourget/gevent-socketio/ – Damian

関連する問題