क्या पायथन के लिए एक वेबस्केट क्लाइंट लागू किया गया है? [बन्द है]


100

मुझे यह प्रोजेक्ट मिला: http://code.google.com/p/standalonewebsocketserver/ एक WebSocket सर्वर के लिए, लेकिन मुझे अजगर में एक WebSocket क्लाइंट लागू करने की आवश्यकता है, अधिक सटीक रूप से मुझे अपने WebSocket सर्वर में XMPP से कुछ कमांड प्राप्त करने की आवश्यकता है।


2
ऑटोबान की कोशिश करो? tavendo.de/autobahn
लेन

3
चूंकि ऑटोबान ट्विस्टेड पर आधारित है, इसलिए यह भी ध्यान देने योग्य हो सकता है कि ट्विस्टेड को एक्सएमपीपी के लिए बहुत अच्छा समर्थन है, अर्थात मेटाजैक .im/2008/09/04// ... इस प्रकार आप वेबसॉफ़्ट के लिए ऑटोबान हो सकते हैं - एक्सएमपीपी एक मुड़ उदाहरण पर चल रहा है । डिस्क्लेमर: मैं ऑटोबान का लेखक हूं।
ओबर्स्टेट

जवाबों:


165

http://pypi.python.org/pypi/websocket-client/

हास्यास्पद आसान उपयोग करने के लिए।

 sudo pip install websocket-client

नमूना ग्राहक कोड:

#!/usr/bin/python

from websocket import create_connection
ws = create_connection("ws://localhost:8080/websocket")
print "Sending 'Hello, World'..."
ws.send("Hello, World")
print "Sent"
print "Receiving..."
result =  ws.recv()
print "Received '%s'" % result
ws.close()

नमूना सर्वर कोड:

#!/usr/bin/python
import websocket
import thread
import time

def on_message(ws, message):
    print message

def on_error(ws, error):
    print error

def on_close(ws):
    print "### closed ###"

def on_open(ws):
    def run(*args):
        for i in range(30000):
            time.sleep(1)
            ws.send("Hello %d" % i)
        time.sleep(1)
        ws.close()
        print "thread terminating..."
    thread.start_new_thread(run, ())


if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                                on_message = on_message,
                                on_error = on_error,
                                on_close = on_close)
    ws.on_open = on_open

    ws.run_forever()

4
@SSHThis pip installखिड़कियों पर ठीक काम करता है! मैं ActivePython 2.7 का उपयोग कर रहा हूं और भाग गया pip install websocket-clientऔर यह बस काम कर गया। एकमात्र मुद्दा यह था कि साइबरविन pythonअजगर के साथ टकराव हुआ था , इसलिए मुझे /cygdrive/C/Python27/pythonActivePython पाने के लिए स्पष्ट रूप से भागना पड़ा
मार्क Lakata

@Bryan शिकार कैसे मामले को संभालने के लिए जब सर्वर डिस्कनेक्ट करता है, जैसा कि मैं टूटी हुई पाइप त्रुटियों को प्राप्त करता हूं - एक बंद पाइप / सॉकेट / fd को लिखना (शायद ग्राहक डिस्कनेक्ट हो गया) !!!
कंवल प्रकाश सिंह

मैं कमांडलाइन में url को कैसे चलाते हैं। उदाहरण के लिए, अगर मुझे कमांडलाइन में ws ("ws: // localhost: 8080 / websocket") का url देना है .. ws = create_connection ("ws: // localhost: 8080 / webbcket") .. जैसे ws = create_connection (sys.argv)
साउंडरीया त्यागराजन

1
@KanwalPrakashSingh क्या आपने ग्राहक वियोग समस्या का समाधान किया?
Jey

Geez, का उपयोग न करें sudo। का उपयोग करें --user
10

22

ऑटोबान के पास पायथन के साथ-साथ कुछ अच्छे उदाहरणों के लिए एक अच्छा वेबसोकेट क्लाइंट कार्यान्वयन है। मैंने टोर्नेडो वेबसॉकेट सर्वर के साथ निम्नलिखित परीक्षण किया और यह काम किया।

from twisted.internet import reactor
from autobahn.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS


class EchoClientProtocol(WebSocketClientProtocol):

   def sendHello(self):
      self.sendMessage("Hello, world!")

   def onOpen(self):
      self.sendHello()

   def onMessage(self, msg, binary):
      print "Got echo: " + msg
      reactor.callLater(1, self.sendHello)


if __name__ == '__main__':

   factory = WebSocketClientFactory("ws://localhost:9000")
   factory.protocol = EchoClientProtocol
   connectWS(factory)
   reactor.run()

हे क्रिस, क्या आप जानते हैं कि इस ऑटोबान वेबसाइडसेट का उपयोग करके सर्वर की तरफ से एक ग्राहक को कैसे अलग किया जा सकता है ?? मुझे किस फंक्शन में कॉल करना है?
जॉनडेप John

हे, @ जॉनडेप हाँ, मेरा मानना ​​है कि यह उस युक्ति का हिस्सा है जो एक वेबसोकेट कनेक्शन में दोनों प्रतिभागियों को "करीब" शुरू कर सकता है। हालांकि मुझे उद्धृत मत करो। वैसे भी, मैं स्रोत कोड को देखा और वहाँ है: "dropConnection" और "sendClose" मैं बस उन्हें प्लग में और उन्हें परीक्षण करना होगा :)
20-13 पर क्रिस

2
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWSऑटोबान के नए संस्करणों के लिए सही आयात है। stackoverflow.com/questions/21381454/…
evan54

1
यदि आप एक नया एपीआई शुरू करने जा रहे हैं तो यह स्पष्ट करना अच्छा है कि कोड क्या कर रहा है।
user650261

1
क्या यह wss का समर्थन करेगा?
अरुण

10

चूंकि मैं उस क्षेत्र में हाल ही में थोड़ा शोध कर रहा हूं (जनवरी, '12), सबसे आशाजनक ग्राहक वास्तव में है: पायथन के लिए वेबसोकेट । यह एक सामान्य सॉकेट का समर्थन करता है जिसे आप इस तरह से कॉल कर सकते हैं:

ws = EchoClient('http://localhost:9000/ws')

clientकिया जा सकता है Threadedया के आधार पर IOLoopसे तूफान परियोजना। यह आपको एक बहु समवर्ती कनेक्शन क्लाइंट बनाने की अनुमति देगा। यदि आप तनाव परीक्षण चलाना चाहते हैं तो उपयोगी है।

क्लाइंट भी onmessage, openedऔर closedविधियों को उजागर करता है । (WebSocket शैली)।


1
संगामिति के बारे में: हमने 60k WS तक के आउटगोइंग कनेक्शन और ऑटोबान सर्वर का इनकमिंग 180k WS कनेक्शन तक परीक्षण किया है। विंडोज पर, यह ट्विस्टेड रनिंग आईओसीपी (आईओ कम्प्लीशन पोर्ट्स) रिएक्टर का उपयोग करके परीक्षण किया गया था और फ्रीबीएसडी पर यह क्यूकी रिएक्टर का उपयोग करके परीक्षण किया गया था। डिस्क्लेमर: मैं ऑटोबान का लेखक हूं।
ओबर्स्टेट

1
संख्या के बारे में बात करते हुए, मेरी तरफ से, मैंने टॉर्नेडो वेबसोकेट (और डब्ल्यूएस-फॉर-पी) के साथ कुछ विस्तारित परीक्षण किए हैं और मुझे आसानी से 15k कनेक्शन मिलते हैं। वैसे भी टेस्ट के लिए अच्छा नहीं है।
kiddouk

0

web2py में धूमकेतु_मेसिंगहोम है, जो वेबस्कैट के लिए टॉर्नेडो का उपयोग करता है यहां एक उदाहरण देखें: http://vimeo.com/18399381 और यहाँ vimeo। com / 18232653


वीडियो इस तरह की चीजों को समझाने के लिए एक खराब वाहन है, कृपया html- आधारित प्रलेखन या ट्यूटोरियल पर पोस्ट करने पर विचार करें।
क्रिस विथर्स

0
  1. Http://code.google.com/p/pywebsocket/ के तहत गूंज ग्राहक पर एक नज़र डालें, यह एक Google परियोजना है।
  2. Github में एक अच्छी खोज है: https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1 यह क्लाइंट और सर्वर लौटाता है।
  3. ब्रेट टेलर ने टॉरनेडो (अजगर) पर वेब सॉकेट भी लागू किया। उसका ब्लॉग पोस्ट: टॉर्नेडो में वेब सॉकेट्स और क्लाइंट साइड सपोर्ट सेक्शन में tornado.websocket पर क्लाइंट कार्यान्वयन API दिखाया गया है ।

1
लेकिन मैं बवंडर के बिना अजगर में एक वेब sobcket की जरूरत है
diegueus9

@sw। आइटम नंबर 3 मान्य नहीं है क्योंकि यह एक वेबस्केट क्लाइंट नहीं है, बल्कि एक वेबस्केट सर्वर है।
ज़ोरान पावलोविक

@ZoranPavlovic पर देखें: tornadoweb.org/en/stable/websocket.html यह एक WebSocket क्लाइंट कार्यान्वयन है।
स्व।

@sw। हां, लेकिन पॉइंट 3 में लिंक एक अजगर सर्वर और जावास्क्रिप्ट क्लाइंट के लिए है। आपको इसे नए url के साथ अपडेट करना चाहिए जिसे आपने अभी पोस्ट किया है, और ढूंढने के लिए धन्यवाद! यह वही है जिसकी मुझे तलाश थी।
ज़ोरान पावलोविक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.