Există un client WebSocket implementat pentru Python? [închis] (Programare, Python, Client Server, Xmpp, Websocket)

diegueus9 a intrebat.

Am găsit acest proiect: http://code.google.com/p/standalonewebsocketserver/ pentru un server WebSocket, dar am nevoie să implementez un client WebSocket în python, mai exact am nevoie să primesc niște comenzi de la XMPP în serverul meu WebSocket.

Comentarii

  • Încercați Autobahn? tavendo.de/autobahn –  > Por Len Holgate.
  • Având în vedere că Autobahn se bazează pe Twisted, ar putea fi de remarcat și faptul că Twisted are un suport foarte bun și pentru XMPP, adică metajack.im/2008/09/04/… Astfel, puteți avea Autobahn pentru WebSockets + XMPP rulând pe o singură instanță Twisted. Disclaimer: Eu sunt autorul Autobahn. –  > Por oberstet.
5 răspunsuri
Bryan Hunt

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

Ridicol de ușor de utilizat.

 sudo pip install websocket-client

Exemplu de cod 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()

Exemplu de cod server:

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

Comentarii

  • @SSHThis pip install funcționează bine pe Windows! Eu folosesc ActivePython 2.7 și am rulat pip install websocket-client și a funcționat pur și simplu. Singura problemă a fost că python a intrat în conflict cu cygwin python, așa că a trebuit să ruleze în mod explicit /cygdrive/C/Python27/python pentru a obține ActivePython –  > Por Mark Lakata.
  • @bryan hunt cum să gestionăm cazul în care serverul se deconectează, ca și în cazul în care primesc erori de țeavă spartă – scriind pe o țeavă/socket/fd închisă (probabil clientul s-a deconectat) !!!! –  > Por Kanwal Prakash Singh.
  • Cum pot trece url-ul în linia de comandă atunci când rulează. de exemplu, dacă trebuie să dau url-ul lui ws („ws://localhost:8080/websocket”) în linia de comandă .. ws = create_connection(„ws://localhost:8080/websocket”)… ca și cum ws = create_connection(sys.argv) –  > Por Soundarya Thiagarajan.
  • @KanwalPrakashSingh Ați rezolvat problema deconectării clientului? –  > Por Jey.
  • Doamne, nu folosiți sudo. Folosiți --user. –  > Por Perfi.
chrisallick

Autobahn are o bună implementare a clientului websocket pentru Python, precum și câteva exemple bune. Am testat următoarele cu un server Tornado WebSocket și a funcționat.

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

Comentarii

  • hei chris, știi cum se poate deconecta un client în mod forțat din partea serverului folosind acest server websocket autobahn?? ce funcție trebuie să apelez pentru a face asta? –  > Por Johnydep.
  • hei, @Johnydep da, cred că face parte din specificații faptul că ambii participanți la o conexiune websocket pot iniția o „închidere”. Totuși, nu mă citați. Oricum, m-am uitat la codul sursă și există: „dropConnection” și „sendClose” le-aș conecta și le-aș testa 🙂 –  > Por chrisallick.
  • from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS este importul corect pentru versiunile mai noi ale autobahn-ului. stackoverflow.com/questions/21381454/… -… –  > Por evan54.
  • Probabil că este bine să explicați ce face codul dacă aveți de gând să introduceți un nou API. –  > Por user650261.
  • va suporta wss ? –  > Por Arun.
kiddouk

Din moment ce am făcut un pic de cercetare în acest domeniu în ultima vreme (Jan, ’12), cel mai promițător client este de fapt : WebSocket pentru Python. Acesta suportă un socket normal pe care îl puteți apela astfel :

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

The client poate fi Threaded sau bazat pe IOLoop de la Tornado proiect. Acest lucru vă va permite să creați un client cu conexiuni simultane multiple. Util dacă doriți să efectuați teste de stres.

Clientul expune, de asemenea, funcția onmessage, , opened și closed metode. (stil WebSocket).

Comentarii

  • În ceea ce privește concurența: am testat clientul Autobahn până la 60 000 de conexiuni WS de ieșire și serverul Autobahn până la 180 000 de conexiuni WS de intrare. Pe Windows, acest lucru a fost testat folosind Twisted care rulează reactorul IOCP (IO Completion Ports), iar pe FreeBSD a fost testat folosind reactorul kqueue. Disclaimer: Sunt autorul Autobahn. –  > Por oberstet.
  • Vorbind despre numere, din partea mea, am făcut câteva teste extinse cu Tornado Websocket (și WS-for-py) și obțin cu ușurință 15k conexiuni. Nu atât de mult, dar oricum e bine pentru un test. –  > Por kiddouk.
sw.
  1. Aruncați o privire la clientul echo sub http://code.google.com/p/pywebsocket/ Este un proiect Google.
  2. O căutare bună în github este: https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1 acesta returnează clienți și servere.
  3. Bret Taylor a implementat, de asemenea, socket-uri web prin Tornado (Python). Postarea sa pe blog la: Web Sockets în Tornado și un API de implementare a clientului este prezentat la tornado.websocket în secțiunea de suport pentru partea de client.

Comentarii

  • dar am nevoie de un web sobcket în python fără tornado –  > Por diegueus9.
  • @sw. Punctul numărul 3 nu este valabil deoarece nu este un client WebSocket, ci mai degrabă un server WebSocket. –  > Por Zoran Pavlovic.
  • @ZoranPavlovic uitați-vă la: tornadoweb.org/en/stable/websocket.html are o implementare a unui client WebSocket. –  > Por sw..
  • @sw. Da, dar linkul de la punctul 3 este către un server python și un client javascript. Ar trebui să-l actualizezi cu noua adresă pe care tocmai ai postat-o. Mulțumesc pentru descoperire! Este exact ceea ce căutam. –  > Por Zoran Pavlovic.
Bruno Rocha – rochacbruno

web2py are comet_messaging.py, care folosește Tornado pentru websockets uitați-vă la un exemplu aici: http://vimeo.com/18399381 și aici vimeo . com / 18232653

Comentarii

  • Videoclipurile sunt un vehicul slab pentru a explica astfel de lucruri, vă rugăm să luați în considerare posibilitatea de a posta la documentația bazată pe html sau la tutoriale. –  > Por Chris Withers.