私は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。
実際に質問に答えるには、クライアントライブラリのバージョン0.6を使用しているio.Socket()呼び出しの2番目のパラメータとして渡された{transports:["websocket"]}オブジェクトが必要です。 JS libのバージョン0.7以上を使用している場合は、サーバー側では設定されていません。また、Webソケット対応のWebブラウザ(Chromeは動作することがわかっています)を使用する必要があります。 – abourget
gevent-socketioの開発はかなり死んでいますが、あまり依存しません。 –
Ravi-このトレッドの言い方では、gevent-socketioを使って両方の答えを示していますが、その代わりに何をお勧めしますか? – Amoliski