Python 용으로 구현 된 WebSocket 클라이언트가 있습니까? [닫은]


100

WebSocket 서버용 http://code.google.com/p/standalonewebsocketserver/ 프로젝트를 찾았 지만 Python에서 WebSocket 클라이언트를 구현해야합니다. 더 정확하게는 WebSocket 서버의 XMPP에서 몇 가지 명령을 받아야합니다.


2
아우토반을 사용해 보시겠습니까? tavendo.de/autobahn
렌 Holgate

3
Autobahn은 Twisted를 기반으로하기 때문에 Twisted도 XMPP를 매우 잘 지원한다는 점에 주목할 가치가 있습니다. 즉 metajack.im/2008/09/04/… 따라서 하나의 Twisted 인스턴스에서 실행되는 WebSockets + XMPP 용 Autobahn을 사용할 수 있습니다. . 면책 조항 : 저는 Autobahn의 저자입니다.
oberstet

답변:


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
@SSH 이것은 pip installWindows에서 잘 작동합니다! 저는 ActivePython 2.7을 사용하고 있으며 실행 pip install websocket-client되었으며 방금 작동했습니다. 유일한 문제는 그 한 python내가 명시 적으로 실행했다, 그래서 Cygwin에서 파이썬과 충돌 /cygdrive/C/Python27/python의 ActivePython 얻을
마크 Lakata

@bryan hunt 에서처럼 서버 연결이 끊어졌을 때 발생하는 경우를 처리하는 방법을 찾습니다. 즉, 파이프 / 소켓 / fd (클라이언트 연결이 끊겼을 가능성이 있음)에 쓰기가 끊어졌습니다.
Kanwal Prakash Singh 2016

실행할 때 명령 줄에서 URL을 어떻게 전달합니까? 예를 들어 명령 줄에서 ws ( "ws : // localhost : 8080 / websocket")의 URL을 제공해야하는 경우 .. ws = create_connection ( "ws : // localhost : 8080 / websocket") .. like ws = create_connection (sys.argv에)
사운 다리아 티아 가라 잔

1
@KanwalPrakashSingh 클라이언트 연결 끊김 문제를 해결 했습니까?
Jey

이런, sudo. 사용 --user.
Perfi

22

Autobahn은 Python을위한 좋은 웹 소켓 클라이언트 구현과 몇 가지 좋은 예제를 가지고 있습니다. Tornado WebSocket 서버로 다음을 테스트했으며 작동했습니다.

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

안녕, 크리스,이 아우토반 웹 소켓 서버를 사용하여 서버 측에서 강제로 클라이언트 연결을 끊을 수있는 방법을 아십니까 ?? 그렇게하려면 어떤 함수를 호출해야합니까?
Johnydep 2012 년

헤이, @Johnydep 네, 웹 소켓 연결의 두 참가자가 "닫기"를 시작할 수 있다는 것이 사양의 일부라고 생각합니다. 그래도 인용하지 마십시오. 어쨌든, 나는 소스 코드를보고하고있다 : "dropConnection"와 "sendClose"난 그냥 그들을 연결하고 테스트 것입니다 :)
chrisallick

2
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS최신 버전의 아우토반에 대한 올바른 가져 오기입니다. stackoverflow.com/questions/21381454/…
evan54

1
새 API를 도입하려는 경우 코드가 수행하는 작업을 설명하는 것이 좋습니다.
user650261 2015

1
wss를 지원합니까?
Arun

10

최근에 그 분야에서 약간의 연구를 해왔 기 때문에 (Jan, '12), 실제로 가장 유망한 클라이언트는 : WebSocket for Python 입니다. 다음과 같이 호출 할 수있는 일반 소켓을 지원합니다.

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

client될 수 있습니다 Threaded에 기반 또는 IOLoop에서 토네이도 프로젝트. 이를 통해 다중 동시 연결 클라이언트를 만들 수 있습니다. 스트레스 테스트를 실행하려는 경우 유용합니다.

클라이언트는 onmessage, openedclosed메서드 도 노출합니다 . (WebSocket 스타일).


1
동시성에 관해서 : 우리는 최대 60k WS 발신 연결의 Autobahn 클라이언트와 수신되는 180k WS 연결의 Autobahn 서버를 테스트했습니다. Windows에서는 Twisted 실행 IOCP (IO Completion Ports) 리액터를 사용하여 테스트했으며 FreeBSD에서는 kqueue 리액터를 사용하여 테스트했습니다. 면책 조항 : 저는 Autobahn의 저자입니다.
oberstet

1
숫자에 대해 얘기하자면, 저는 Tornado Websocket (및 WS-for-py)으로 몇 가지 확장 테스트를 수행했으며 쉽게 15k 연결을 얻습니다. 어쨌든 테스트에는 좋지 않지만 좋습니다.
kiddouk 2012


0
  1. http://code.google.com/p/pywebsocket/ 아래에있는 echo 클라이언트를 살펴보세요 . Google 프로젝트입니다.
  2. github에서 좋은 검색은 다음 과 같습니다 : https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1 클라이언트와 서버를 반환합니다.
  3. Bret Taylor는 또한 Tornado (Python)를 통해 웹 소켓을 구현했습니다. 그의 블로그 게시물 : Tornado의 웹 소켓 및 클라이언트 구현 API는 클라이언트 측 지원 섹션의 tornado.websocket 에 표시됩니다 .

1
하지만 난 토네이도없이 파이썬 웹 sobcket 필요
diegueus9

@sw. 항목 번호 3은 WebSocket 클라이언트가 아니라 WebSocket 서버이므로 유효하지 않습니다.
Zoran Pavlovic 2014 년

볼 @ZoranPavlovic : tornadoweb.org/en/stable/websocket.html 그것은 웹 소켓 클라이언트 구현이 있습니다.
sw.

@sw. 예,하지만 3 번 지점의 링크는 파이썬 서버와 자바 스크립트 클라이언트입니다. 방금 게시 한 새 URL로 업데이트해야하며 찾아 주셔서 감사합니다! 내가 찾던 바로 그것입니다.
Zoran Pavlovic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.