2012-03-16 13 views
5

मैं पिरामिड और सॉकेट.ओओ फ्रेमवर्क का उपयोग करके एक सरल वेबसॉकेट एप्लिकेशन बनाने की कोशिश कर रहा हूं। सर्वर साइड कोड:पिरामिड और socket.io के साथ Websockets का उपयोग कैसे करें?

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> 

मैं कनेक्शन के लिए वेब सॉकेट उपयोग करने के लिए इस कोड की आवश्यकता है, लेकिन यह एक्सएचआर-मतदान के लिए वापस गिर जाता है। मैं इसे कैसे ठीक कर सकता हूं?

अग्रिम धन्यवाद, इवान।

उत्तर

8

आप शायद gevent-socketio की नवीनतम रिलीज को देखने के लिए चाहते हैं, और इसके प्रलेखन http://gevent-socketio.readthedocs.org/

में एक बड़ा फ़ेरबदल PyCon 2012 स्प्रिंट पर किया गया था, जॉन एंडरसन, सेबेस्तियन Béal और अपने आप से।

+0

वास्तव में प्रश्न का उत्तर देने के लिए, io.Socket() कॉल के दूसरे पैरामीटर के रूप में पारित एक {ट्रांसपोर्ट: ["websocket"]} ऑब्जेक्ट होना चाहिए, जो क्लाइंट लाइब्रेरी के संस्करण 0.6 का उपयोग कर रहा है। यदि आप जेएस lib के संस्करण 0.7+ का उपयोग कर रहे हैं, तो यह सर्वर-साइड पर सेट नहीं है। आपको वेब-सॉकेट सक्षम वेब ब्राउजर का भी उपयोग करना होगा (क्रोम एक है जो मुझे पता है कि काम करता है)। – abourget

+0

गीवेंट-सॉकेटियो विकास काफी मर चुका है, इस पर बहुत भरोसा नहीं है। –

+0

रवि- इस ट्रेड में दोनों उत्तर gevent-socketio का उपयोग करते हुए उल्लेख करते हैं, आप इसके बजाय उपयोग करने की क्या सलाह देंगे? – Amoliski

2

आप pyramid_sockjs पर भी एक नज़र डाल सकते हैं। यह पिरामिड के साथ अच्छी तरह से एकीकृत करता है और सॉकेट का उपयोग करता है जो सॉकेट.ओ की समान भूमिका को पूरा करता है और समझने के लिए तर्कसंगत रूप से सरल है।

+3

इसे गीवेंट-सॉकेटियो के पक्ष में बहिष्कृत किया गया है: https://github.com/abourget/gevent-socketio/ – Damian

संबंधित मुद्दे