Python için uygulanan bir WebSocket istemcisi var mı? [kapalı]


101

Bu projeyi buldum: Bir WebSocket sunucusu için http://code.google.com/p/standalonewebsocketserver/ , ancak python'da bir WebSocket istemcisi uygulamam gerekiyor, daha doğrusu WebSocket sunucumda XMPP'den bazı komutlar almam gerekiyor.


2
Autobahn'ı dene? tavendo.de/autobahn
Len Holgate

3
Autobahn Twisted'a dayandığından , Twisted'ın XMPP için de çok iyi bir desteğe sahip olduğunu belirtmekte fayda var, yani metajack.im/2008/09/04/… Böylece, bir Twisted örnekte WebSockets için Autobahn + XMPP çalıştırabilirsiniz. . Feragatname: Autobahn'ın yazarıyım.
oberstet

Yanıtlar:


166

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

Kullanımı gülünç derecede kolay.

 sudo pip install websocket-client

Örnek müşteri kodu:

#!/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()

Örnek sunucu kodu:

#!/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
@SSHT Bu pip install, pencerelerde iyi çalışıyor! ActivePython 2.7 kullanıyorum ve çalıştırdım pip install websocket-clientve işe yaradı. Tek sorun pythoncygwin python ile /cygdrive/C/Python27/python
çakışmasıydı

@bryan hunt sunucu bağlantısı kesildiğinde durumu nasıl ele alacağımı, örneğin kırık boru hataları alıyorum - kapalı bir boru / soket / fd'ye yazma (muhtemelen istemcinin bağlantısı kesildi) !!!
Kanwal Prakash Singh

Çalıştırırken url'yi komut satırında nasıl geçiririm? örneğin, komut satırında ws ("ws: // localhost: 8080 / websocket") url'sini vermem gerekirse .. ws = create_connection ("ws: // localhost: 8080 / websocket") .. ws = create_connection gibi (sys.argv)
Soundarya Thiagarajan

1
@KanwalPrakashSingh İstemci bağlantı kesilme problemini çözdünüz mü?
Jey

Tanrım, kullanma sudo. Kullanın --user.
Perfi

23

Autobahn, Python için iyi bir websocket istemci uygulamasına ve bazı iyi örneklere sahiptir. Aşağıdakileri bir Tornado WebSocket sunucusu ile test ettim ve işe yaradı.

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()

hey chris, bu autobahn websocket sunucusunu kullanarak bir istemcinin sunucu tarafından zorla bağlantısını nasıl kesebileceğini biliyor musun? bunu yapmak için hangi işlevi çağırmalıyım?
Johnydep

hey, @Johnydep evet, bir websocket bağlantısındaki her iki katılımcının da bir "kapanış" başlatabileceğine inanıyorum. Yine de benden alıntı yapma. Her neyse, kaynak koduna baktım ve orada: "dropConnection" ve "sendClose" var, onları sadece takıp test ediyorum :)
chrisallick

2
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWSotobanın daha yeni sürümleri için doğru içe aktarmadır. stackoverflow.com/questions/21381454/…
evan54

1
Yeni bir API tanıtacaksanız, kodun ne yaptığını açıklamak muhtemelen iyidir.
user650261

1
wss'yi destekleyecek mi?
Arun

10

Son zamanlarda bu alanda biraz araştırma yaptığım için (Ocak '12), en umut verici müşteri aslında: Python için WebSocket . Bu şekilde arayabileceğiniz normal bir soketi destekler:

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

clientOlabilir Threadeddayalı veya IOLoopgelen Tornado projesi. Bu, çoklu eşzamanlı bağlantı istemcisi oluşturmanıza izin verecektir. Stres testleri yapmak istiyorsanız kullanışlıdır.

İstemci ayrıca onmessage, openedve closedyöntemlerini de ortaya çıkarır . (WebSocket stili).


1
Eşzamanlılıkla ilgili olarak: Autobahn istemcisini 60 bine kadar WS giden bağlantıları ve gelen 180k WS bağlantılarına kadar Autobahn sunucusunu test ettik. Windows'da bu, Twisted-running IOCP (IO Completion Ports) reaktörü kullanılarak test edildi ve FreeBSD'de bu, kqueue reaktörü kullanılarak test edildi. Feragatname: Autobahn'ın yazarıyım.
oberstet

1
Rakamlardan bahsetmişken, Tornado Websocket (ve WS-for-py) ile bazı genişletilmiş testler yaptım ve kolayca 15k bağlantı elde ediyorum. Zaten bir test için o kadar değil ama iyi.
kiddouk

0

web2py'de comet_messaging.py vardır ve web soketleri için Tornado'yu kullanır, burada bir örneğe bakın: http://vimeo.com/18399381 ve burada vimeo. com / 18232653


videolar bunun gibi şeyleri açıklamak için yetersiz bir araçtır, lütfen html tabanlı belgelere veya öğreticilere göndermeyi düşünün.
Chris Withers

0
  1. Http://code.google.com/p/pywebsocket/ altında echo istemcisine bir göz atın Bu bir Google projesi.
  2. Github'da iyi bir arama şudur: https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1 istemcileri ve sunucuları döndürür.
  3. Bret Taylor, Tornado (Python) üzerinden web soketleri de uyguladı. Şuradaki blog yazısı: Tornado'daki Web Soketleri ve bir istemci uygulama API'si, istemci tarafı destek bölümünde tornado.websocket'de gösterilmektedir .

1
ancak python'da kasırga olmadan bir ağa ihtiyacım var
diegueus9

@sw. Öğe numarası 3, bir WebSocket istemcisi değil, bir WebSocket sunucusu olduğu için geçerli değildir.
Zoran Pavlovic

@ZoranPavlovic'e bakın: tornadoweb.org/en/stable/websocket.html , WebSocket istemci uygulamasına sahiptir.
sw.

@sw. Evet, ancak 3. noktadaki bağlantı bir python sunucusuna ve javascript istemcisine yöneliktir. Yeni gönderdiğiniz yeni url ile güncellemelisiniz ve bulduğunuz için teşekkürler! Tam olarak aradığım şey buydu.
Zoran Pavlovic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.