2010-06-29 36 views
67

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 trình khách websocket trong python, chính xác hơn tôi cần nhận một số lệnh từ xmpp trong máy chủ websocket của mình.Có trình khách WebSocket được triển khai cho python không?

+2

Hãy thử Autobahn? http://www.tavendo.de/autobahn/ –

+3

Kể từ khi Autobahn được dựa trên Twisted, nó cũng có thể đáng chú ý là Twisted có hỗ trợ rất tốt cho XMPP là tốt, tức là http://metajack.im/2008/09/ 04/get-twisted-on-xmpp --- tương lai-of-twisted-words/ Do đó, bạn có thể có Autobahn cho WebSockets + XMPP chạy trên một thể hiện Twisted. Tuyên bố từ chối trách nhiệm: Tôi là tác giả của Autobahn. – oberstet

Trả lời

0
  1. Hãy xem ứng dụng khách theo dõi http://code.google.com/p/pywebsocket/ Đó là một dự án của Google.
  2. 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ề khách hàng và máy chủ.
  3. Bret Taylor cũng đã triển khai ổ cắm web trên Tornado (Python). Bài đăng trên blog của anh ấy tại: Web Sockets in 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 ứng dụng khách.
+1

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

+0

Tôi vừa chỉnh sửa câu trả lời. Nhìn vào kết quả tìm kiếm trên github, có nhiều triển khai. –

+0

@sw. Mã số 3 không hợp lệ vì nó không phải là một máy khách WebSocket, mà là một máy chủ WebSocket. –

1

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

10

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

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

Các client có thể Threaded hoặc dựa trên IOLoop từ dự án Tornado. Điều này sẽ cho phép bạn tạo ra một khách hàng kết nối đa đồng thời. Hữu ích nếu bạn muốn chạy thử nghiệm căng thẳng.

Khách hàng cũng hiển thị các phương pháp onmessage, openedclosed. (Phong cách WebSocket).

+1

Về đồng thời: chúng tôi đã thử nghiệm ứng dụng Autobahn lên tới 60k kết nối gửi đi WS và máy chủ Autobahn lên tới 180k kết nối WS đến. Trên Windows, điều này đã được kiểm tra bằng cách sử dụng lò phản ứng IOCP (IO Completion Ports) xoắn và trên FreeBSD, điều này đã được thử nghiệm bằng cách sử dụ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ề các 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 kết nối 15k. Không nhiều nhưng tốt cho một bài kiểm tra anyway. – kiddouk

15

Autobahn có ứng dụng khách websocket tốt cho Python cũng như một số ví dụ hay. Tôi đã thử nghiệm sau đây với một máy chủ WebSocket Tornado và nó đã làm việc.

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

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

+0

hey, @Johnydep yeah, 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 có thể bắt đầu "đóng". Đừng trích dẫn tôi. Dù sao, tôi nhìn vào mã nguồn và có: "dropConnection" và "sendClose" tôi chỉ cần cắm chúng vào và kiểm tra chúng :) – chrisallick

+1

'từ autobahn.twisted.websocket nhập khẩu WebSocketClientFactory, WebSocketClientProtocol, connectWS' là nhập khẩu chính xác cho các phiên bản mới hơn của autobahn. http://stackoverflow.com/questions/21381454/autobahn-cannot-import-name-error – evan54

116

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

Ridiculously dễ sử dụng.

sudo pip install websocket-client 

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

#!/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 "Reeiving..." 
result = ws.recv() 
print "Received '%s'" % result 
ws.close() 

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

Darn Tôi muốn 'pip install' dễ sử dụng trên windows: ( –

+4

@SSHThis' pip install' hoạt động tốt trên windows! Tôi đang sử dụng ActivePython 2.7 và chạy 'pip install websocket-client' và nó chỉ hoạt động. vấn đề là '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 –

+0

@bryan hunt cách xử lý trường hợp khi máy chủ ngắt kết nối, như tôi bị hỏng đường ống lỗi - ghi vào một ống/socket/fd kín (có thể là máy khách đã bị ngắt kết nối) !!! –

Các vấn đề liên quan