Có ứng dụng khách WebSocket nào được triển khai cho Python không? [đóng cửa]


100

Tôi đã tìm thấy dự án này: http://code.google.com/p/standalonewebsocketserver/ cho máy chủ WebSocket, nhưng tôi cần triển khai ứng dụng khách WebSocket trong python, chính xác hơn là tôi cần nhận một số lệnh từ XMPP trong máy chủ WebSocket của mình.


2
Dùng thử Autobahn? tavendo.de/autobahn
Len Holgate

3
Vì Autobahn dựa trên Twisted, nên cũng cần lưu ý rằng Twisted cũng hỗ trợ rất tốt cho XMPP, tức là metajack.im/2008/09/04/… Do đó, bạn có thể có Autobahn cho WebSockets + XMPP chạy trên một phiên bản Twisted . Tuyên bố từ chối trách nhiệm: Tôi là tác giả của Autobahn.
oberstet

Câu trả lời:


165

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

Dễ sử dụng một cách kỳ lạ.

 sudo pip install websocket-client

Mã khách hàng mẫu:

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

Mã máy chủ mẫu:

#!/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 Cái này pip installhoạt động tốt trên windows! Tôi đang sử dụng ActivePython 2.7 và đã chạy pip install websocket-clientvà nó chỉ hoạt động. Vấn đề duy nhất được rằng pythonđụng độ với python Cygwin, vì vậy tôi đã phải chạy một cách rõ ràng /cygdrive/C/Python27/pythonđể có được ActivePython
Đánh dấu Lakata

@bryan săn cách xử lý trường hợp máy chủ ngắt kết nối, như tôi gặp lỗi đường ống bị hỏng - ghi vào đường ống / ổ cắm / fd đã đóng (có thể là máy khách đã ngắt kết nối) !!!
Kanwal Prakash Singh

Làm cách nào để chuyển url trong dòng lệnh khi chạy. ví dụ: nếu tôi cần cung cấp url của ws ("ws: // localhost: 8080 / websocket") trong dòng lệnh .. ws = create_connection ("ws: // localhost: 8080 / websocket") .. như ws = create_connection (sys.argv)
Soundarya Thiagarajan

1
@KanwalPrakashSingh Bạn có giải quyết được sự cố ngắt kết nối máy khách không?
Jey

Geez, không sử dụng sudo. Sử dụng --user.
Perfi

22

Autobahn có một triển khai ứng dụng khách websocket tốt cho Python cũng như một số ví dụ điển hình. Tôi đã thử nghiệm phần sau với máy chủ Tornado WebSocket và nó hoạt động.

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

Này chris, bạn có biết làm cách nào để ngắt kết nối một cách mạnh mẽ một máy khách khỏi phía máy chủ bằng cách sử dụng máy chủ websocket autobahn này không ?? chức năng nào tôi phải gọi để làm điều đó?
Johnydep

này, @Johnydep vâng, tôi tin rằng đó là một phần của thông số kỹ thuật mà cả hai người tham gia trong kết nối websocket đều có thể bắt đầu "đóng". Đừng trích dẫn tôi mặc dù. Dù sao, tôi nhìn vào mã nguồn và có: "dropConnection" và "sendClose" tôi muốn chỉ cần cắm chúng trong và kiểm tra chúng :)
chrisallick

2
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWSlà cách nhập chính xác cho các phiên bản autobahn mới hơn. stackoverflow.com/questions/21381454/…
evan54

1
Có lẽ tốt để giải thích mã đang làm gì nếu bạn định giới thiệu một API mới.
user650261

1
nó sẽ hỗ trợ wss?
Arun

10

Vì tôi đã thực hiện một chút nghiên cứu trong lĩnh vực đó gần đây (tháng 1, '12), khách hàng hứa hẹn nhất thực sự là: WebSocket cho Python . Nó hỗ trợ một ổ cắm thông thường mà bạn có thể gọi như thế này:

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

Các clientthể Threadedhoặc dựa trên IOLooptừ Tornado dự án. Điều này sẽ cho phép bạn tạo một máy khách nhiều kết nối đồng thời. Hữu ích nếu bạn muốn chạy các bài kiểm tra căng thẳng.

Máy khách cũng hiển thị onmessage, openedclosedcác phương thức. (Kiểu WebSocket).


1
Về tính đồng thời: chúng tôi đã thử nghiệm máy khách Autobahn lên đến 60 nghìn kết nối WS gửi đi và máy chủ Autobahn lên đến 180 nghìn kết nối WS đến. Trên Windows, điều này đã được thử nghiệm bằng cách sử dụng lò phản ứng IOCP (IO Completion Ports) Twisted chạy và trên FreeBSD, điều này đã được thử nghiệm bằng lò phản ứng kqueue. Tuyên bố từ chối trách nhiệm: Tôi là tác giả của Autobahn.
oberstet

1
Nói về con số, về phía tôi, tôi đã thực hiện một số thử nghiệm mở rộng với Tornado Websocket (và WS-for-py) và tôi dễ dàng nhận được 15 nghìn kết nối. Không nhiều nhưng tốt cho một bài kiểm tra dù sao.
kiddouk

0

web2py có comet_messaging.py, sử dụng Tornado cho websockets, hãy xem ví dụ ở đây: http://vimeo.com/18399381 và đây là vimeo. com / 18232653


video là một phương tiện kém để giải thích những thứ như thế này, vui lòng xem xét đăng lên tài liệu hoặc hướng dẫn dựa trên html.
Chris Withers

0
  1. Hãy xem ứng dụng echo trong http://code.google.com/p/pywebsocket/ Đây là một dự án của Google.
  2. Một tìm kiếm tốt trong github là: https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1 nó trả về máy khách và máy chủ.
  3. Bret Taylor cũng triển khai các ổ cắm web trên Tornado (Python). Bài đăng trên blog của anh ấy tại: Web Sockets trong Tornado và API triển khai ứng dụng khách được hiển thị tại tornado.websocket trong phần hỗ trợ phía máy khách.

1
nhưng tôi cần một sobcket web trong python mà không cơn lốc xoáy
diegueus9

@sw. Mục số 3 không hợp lệ vì nó không phải là máy khách WebSocket mà là máy chủ WebSocket.
Zoran Pavlovic vào

@ZoranPavlovic hãy xem tại: tornadoweb.org/en/stable/websocket.html nó có triển khai ứng dụng khách WebSocket.
sw.

@sw. Có, nhưng liên kết ở điểm 3 là máy chủ python và ứng dụng khách javascript. Bạn nên cập nhật nó với url mới mà bạn vừa đăng, và cảm ơn bạn đã tìm thấy! Đó chính xác là những gì tôi đang tìm kiếm.
Zoran Pavlovic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.